2017-09-23 5 views
0

Ich bin neu zu reagieren/Redux und ich versuche, eines meiner Objekte im Redux-Zustand als Map/Hash zu speichern, wobei die Schlüssel die Primärschlüssel aus den Objekten aus der db und den Werten sind das Objekt selbst sein. Jedoch scheint der Zustand jedes Mal, wenn ich mich aktualisiere, übergangen zu werden, und der neue Wert, den ich hinzufüge, ist der einzige, der übrig bleibt. Hier ist mein Code:reagieren/redux geschachtelten Zustand Problem

import { RECEIVE_CURRENT_SCAN_RESULT } from '../constants'; 

const initialState = { 
    currentScanResult: {info:{}, results:[]}, 
}; 

export default createReducer(initialState, { 
    [RECEIVE_CURRENT_SCAN_RESULT]: (state, payload) => 
     Object.assign({}, state, { 
      currentScanResult: payload 
     }) 

}); 


export function createReducer(initialState, reducerMap) { 
    return (state = initialState, action) => { 
     const reducer = reducerMap[action.type]; 

     return reducer 
      ? reducer(state, action.payload) 
      : state; 
    } 
} 

Ich mag würde nur in meinem Objekt übergeben:

{id: 1, thing: "blue"} 

und hat den Staat damit aktualisiert werden. Dann, wenn ich in übergeben:

{id: 2, thing: "red"} 

Ich würde mein redux Zustand wie zu reflektieren:

currentScanResult: {1: {id: 1, thing: "blue"}, 2: {id: 2, thing: "red"}} 

Gibt es eine einfache Möglichkeit für mich, dies zu tun? Wird redux neu gerendert, wenn ich einen verschachtelten Wert aktualisiere? Zum Beispiel, wenn ich gebe:

{id: 2, thing: "purple"} 

=> currentScanResult: {1: {id: 1, thing: "blue"}, 2: {id: 2, thing: "purple"}} 

Ich möchte ein Verhalten wie folgt sehen. Ich habe mich mit Immutable JS beschäftigt. Ich frage mich nur, ob ich diesen einfachen Use Case auch ohne ihn machen kann?

Jede Hilfe wird geschätzt! Vielen Dank!

Antwort

2

Wenn Sie das tun

Object.assign({}, state, { 
    currentScanResult: payload 
}) 

Sie state.currentScanResult überschrieben werden. Wenn Sie es aktualisieren möchten, müssen Sie etwas wie

Object.assign({}, state, { 
    currentScanResult: Object.assign({}, state.currentScanResult, payload) 
}) 
+0

Vielen Dank! Weißt du, ob sich der Zustand mit redux nesting so richtig aktualisiert? irgendwelche Nachteile? – BC00

+0

Es gibt kein Problem. Je verschachtelter die Daten sind, desto mühsamer wird es, interne Strukturen zu aktualisieren. Weitere Informationen finden Sie in den folgenden Dokumenten: http://redux.js.org/docs/recipes/reducers/ImmutableUpdatePatterns.html – JulienD

+0

ist dieser mutierende Status. Aus irgendeinem Grund wird meine Komponente nicht erneut gerendert, wenn die verschachtelten Werte aktualisiert werden. .. – BC00

Verwandte Themen