在接收新道具的组件中,出现了一种奇怪的行为。组件将接收一个对象和一个日期对象。
无论何时更新对象,在componentWillUpdate(nextProps, nextState) nextProps.someObject中,都会像预期的那样返回一个与this.props.someObject不同的对象。但是,当date对象被更新时,this.props.someObject已经包含了存储在nextProps中的新更新日期。
我是不是遗漏了一些关于数据类型或引用的东西?
编辑
举个例子:
SomeComponent date={newDate} someObject={newSomeObject}
componentWillUpdate: function(nextProps, nextState){
console.log(nextProps.date !== this.props.date); // at update: false
console.log(nextProps.someObject.name !== this.props.someObject.name); // at update: true
}发布于 2017-08-08 12:16:31
对待
state就好像它是不可变的。
在浏览器中尝试以下代码:
var d = new Date();
var d2 = d;
d2.setDate(7);
d == d2;
d2和d指向同一个对象。
现在你得到了你的状态:
let newDate = this.state.date
无论您更新什么newDate,this.state.date也会被更改。你可以试一试你的代码。
同样的情况也适用于其他数据类型,如数组。
我建议使用日期-fns作为Redux的创建者声明
https://stackoverflow.com/questions/45562663
复制相似问题