我正在更新我的redux存储变量并将它们作为道具传递给组件,但在这段代码中,当前和下一个道具是相同的,当我通过外部调度更改它们时,它们等于新的道具。
componentWillReceiveProps (nextProps) {
console.log(this.props.data);
console.log(nextProps.data);
}
为什么会这样?如果通过发送更改,它们应该完全不同吗?
答案 0 :(得分:3)
根据官方docs:
请注意,即使道具没有,也可以调用此方法 已更改,因此请务必比较当前值和下一个值 只想处理变化。 父组件可能会发生这种情况 导致您的组件重新渲染。
所以你应该看到至少一组不同的道具(实际的变化),但不一定在每个日志上。
答案 1 :(得分:1)
我找到了问题的核心。
我用它来克隆我在reducer中的当前状态:
export const cloneDeep = (state) => ({...state});
这似乎正在改变现状。 我用这个替换了它:
export const cloneDeep = (state) => JSON.parse(JSON.stringify(state));
如果更改了当前状态和当前道具的任何更改都不等于nextProps。