2017-10-04 1 views
0

Ich habe ein Problem, wenn ich versuche, ein Array im Speicher mit .Push (Newvalue) zu aktualisieren. Wenn ich den neuen Wert verschiebe, wird der Status von einem Array auf den Wert der Länge des Arrays aktualisiert.Problem mit React Redux array.push

Staat vor dem Update: [ 'asd', 'sdf', 'wer']

Zustand nach: 4

Aktion:

export function updateLocalCompliments(newCompliment) { 
    return ({ 
    type: LOCAL_COMPLIMENT, 
    payload: newCompliment 
    }) 
} 

Minderer: (state.compliments das ist tatsächliches Array)

const INITIAL_STATE = { 
    compliments: [] 
} 

function compliments(state=INITIAL_STATE, action) { 
     switch (action.type) { 
     case LOCAL_COMPLIMENT: 
      return (
      Object.assign({}, state, { 
       compliments: state.compliments.push(action.payload) 
      }) 
     ) 
     default: 
      return state; 
     } 
    } 
+1

'push' nicht zurückgibt, die das mutierte Array aber seine aktualisierte Länge. Sie müssen dies anders handhaben: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/push – m90

+1

'push' sollte nicht mit react-redux verwendet werden, da es das mutiert Array – MinusFour

Antwort

2

Das liegt daran, dass die Push-Methode das Array ändert, an dem es aufgerufen wird, und die neue Länge zurückgibt. Was Sie wollen, ist etwas wie concat().

Push: https://www.w3schools.com/jsref/jsref_push.asp

Concat: https://www.w3schools.com/jsref/jsref_concat_array.asp

compliments: state.compliments.concat(action.payload) 
+0

Und hier ist ein paar Branchmark zu vergleichen, was ist der schnellste Array-Klon Weg: https://jsperf.com/new-array-vs-splice-vs-slice/31 – Morishiri

+0

Das hat funktioniert! Danke für eine klare Erklärung und Ressourcen für noch mehr Aufklärung. – Aaron