React/Redux组件不会重新渲染
问题描述:
即使看到状态被正确更新,我仍然遇到反应组件无法重新呈现的问题。我正在使用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;
}
}
答
在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)
})
,并应至少测试,如果问题是突变的问题或者如果有其他需要修复的东西。
用一个建议的solotion发表了一个答案,并且提出了一个非常小的编辑问题(Stackoverflow需要关于问题的'javascript'标记,否则语法高亮不起作用,这就是为什么你的代码和发布的答案中的任何代码只是看起来像没有颜色的灰色文本)。 – jonahe
PS。我只是给我的答案加了一个说明。 – jonahe