2016-08-11 34 views
0

Wir verwenden Redux.js mit React.js (React-Redux), und im Reducer verwenden wir den folgenden Code (wir verwenden redux-Aktionen vorformulierten zu reduzieren):Redux/React-Redux - Verwenden von "state = XXX" im Reducer

const update = require('react/lib/update'); 
const myReducer = handleActions 
({ 
    [myAction]: (state, action) => { 
     state = update(state, { 
      something: {$set: !state.someProperty} 
     }); 
     return someFunction(state); 
    } 
}) 

Wir update von React Immutability Helpers verwenden, aber das Ergebnis in den Zustand zuweisen state = verwenden.

Ist dies gegen die basic Redux guidlines - also den Zustand mutieren? Es scheint so, aber der Code scheint perfekt und schnell zu funktionieren, und der redux devtools zeigt die Statusänderungen korrekt an ...

Antwort

1

Ihr Beispiel ist okay, weil Sie nicht eigentlich den Inhalt des Objekts mutieren Die state Variable zeigt auf. Stattdessen aktualisieren Sie nur die lokale Variable state, um stattdessen auf ein anderes Objekt zu verweisen.

Es ist wichtig zu verstehen, wie Variablen und Referenzen in Javascript funktionieren, was helfen wird, zu klären, was hier vor sich geht.

Persönlich würde ich vorschlagen, const newState = update(....) für Klarheit zu tun.

+1

Danke, jetzt habe ich es! Ich war verwirrt, denn wenn ** ich den ** Inhalt ** der lokalen Variable 'state' ändere (indem ich' push' benutze oder eine Eigenschaft oder was auch immer setze), ** ** ändere ich ** das tatsächliche Zustandsobjekt. Durch Ändern der Referenz auf eine andere Eigenschaft ändert JS jedoch nicht das ursprüngliche Objekt, sondern ändert die Referenz der lokalen Variablen. Gut :-) –

Verwandte Themen