2017-09-26 7 views
0

Ich habe ein Problem mit einer reagierenden Komponente, die nicht neu rendert, obwohl ich sehe, dass der Zustand richtig aktualisiert wird. Ich verwende redux, ich habe gelesen, dass Zustandsänderung häufig das Problem/die Ursache davon ist, ich denke gerade nicht, dass ich das tue. Der Wert, den ich aktualisiere, ist innerhalb des Status 3 Ebenen tief verschachtelt. HierReact/Redux Component nicht neu rendern

ist der Code:

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

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

[RECEIVE_CURRENT_SCAN_RESULT]: (state, payload) => 
    Object.assign({}, state, { 
     currentScanResult: 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; 
    } 
} 
+0

Posted eine Antwort mit einer vorgeschlagenen solotion, plus schlug eine sehr kleine Bearbeitung zu Ihrer Frage (Stackoverflow benötigt die 'Javascript' Tag auf der Frage oder sonst die Syntax high-lighting nicht funktioniert, weshalb Ihr Code, und jeder Code in einer geposteten Antwort sieht einfach wie grauer Text ohne Farbe aus. – jonahe

+0

PS. Ich fügte meiner Antwort nur eine Klarstellung hinzu. – jonahe

Antwort

1

In Object.assign das erste Argument ist das "Ziel" Objekt,

so diese Linie

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

noch mutiert die currentScanResult Eigenschaft auf die Zustand.

ein leeres Objekt als erstes Argument in Object.assign, wie Sie auf der ersten Ebene haben, so wird das Ganze:

// empty object as target here 
Object.assign({}, state, { 
    // empty object as target here as well 
    currentScanResult: Object.assign({}, state.currentScanResult, payload) 
}) 

und das sollte zumindest testen, ob das das Problem ist ein Problem der Mutation oder wenn es etwas anderes gibt, das repariert werden muss.

+0

Es scheint zu funktionieren, vielen Dank, ich lutsche. – BC00

+0

Gut zu hören, es funktioniert! Sie saugen nicht! Manchmal ist Lernen schwer (wenn es einfach wäre, dann würde Stackoverflow nicht existieren), und selbst nachdem man etwas gut gelernt hat, ist es leicht, kleine Fehler wie diese zu machen. – jonahe

Verwandte Themen