2016-09-12 36 views
0

In meinem Reducer kann ich nicht verstehen, warum mein Zustand aktualisiert, aber nicht kopiert.React-Redux: State aktualisiert, aber nicht kopiert

const loginReducer = (state = {}, action) => { 

    let newstate = JSON.parse(JSON.stringify(state)) 
    const { type, payload } = action 

    switch(type) { 
     case constant.LOGIN_SUCCESS: 
      // 
      newstate = { login: [{ user: payload.user, password: payload.password, logged: true }] } 
      console.log(newstate.login) 
      break; 
     default: 
      break; 
    } 

    return newstate 

} 

Sicherlich ist es eine einfache Sache, was mir fehlt, aber ich kann nicht herausfinden, es

+0

Warum wollen Sie fühlen Sie sich mit 'JSON.parse (JSON.stringify (Staat))' klonen müssen? –

Antwort

0

Es sieht aus, als ob Sie komplett neu zuweisen sind newstate in dieser Zeile:

newstate = { login: [{ user: payload.user, password: payload.password, logged: true }] } 

Wenn Sie die aktuellen Werte in state pflegen wollen, müssen Sie auch sind sie:

newstate = { ...newstate, login: [{ user: payload.user, password: payload.password, logged: true }] } 

Das obige Beispiel verwendet die Objektverteilung, die Sie in Ihrer Babel-Konfiguration haben oder nicht haben können. Sie können auch Object.assign verwenden, um die gleiche Sache zu erreichen:

newstate = Object.assign(newstate, { login: [{ user: payload.user, password: payload.password, logged: true }] }); 
+0

Hallo Davin, ich habe getan, wie du vorgeschlagen hast, aber ich habe diesen Fehler erhalten: etwas Fehler: Kann Modul nicht finden "./src/reducers/loginReducer" –

+0

Haben Sie Objekt in Ihrer Babel-Konfiguration verteilt? Ich werde eine andere Methode bearbeiten, um dasselbe zu erreichen. –

+0

Ich habe Babel-Preset-Stage-2 installiert, aber zur Zeit habe ich das gleiche Problem –

Verwandte Themen