2017-09-26 194 views
0

即使看到状态被正确更新,我仍然遇到反应组件无法重新呈现的问题。我正在使用REDX,我已经阅读过状态变异通常是这个问题/原因,我只是不认为我这样做。我正在更新的值在状态内嵌套3个深度。React/Redux组件不会重新渲染

下面是代码:

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

用一个建议的solotion发表了一个答案,并且提出了一个非常小的编辑问题(Stackoverflow需要关于问题的'javascript'标记,否则语法高亮不起作用,这就是为什么你的代码和发布的答案中的任何代码只是看起来像没有颜色的灰色文本)。 – jonahe

+0

PS。我只是给我的答案加了一个说明。 – jonahe

回答

1

Object.assign第一个参数是 “目标” 对象,

所以这行

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

仍然突变对的currentScanResult属性州。

使用空对象作为第一个参数在Object.assign,像你这样的第一级,所以整个事情变成:

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

,并应至少测试,如果问题是突变的问题或者如果有其他需要修复的东西。

+0

它似乎在工作,非常感谢,我吮吸。 – BC00

+0

很高兴听到它的作品!你不吸!学习有时很难(如果很简单,那么Stackoverflow就不存在了),即使你学得很好,也很容易犯这样的小错误。 – jonahe

相关问题