2017-08-08 24 views
1

在接收新道具的组件中,发生了一个奇怪的行为。该组件将收到一个对象和一个日期对象。React更新生命周期方法返回日期相同的道具

每当对象更新时,componentWillUpdate(nextProps, nextState) nextProps.someObject将按照预期返回与this.props.someObject不同的对象。 但是,当更新日期对象时,this.props.someObject已包含存储在nextProps中的新更新日期。

我在这里丢失了关于数据类型或引用的内容?

EDIT

用一个例子:

  1. 渲染SomeComponent与日期= 2017年8月8日,并以{名称: “约翰”}对象
  2. 更新SomeComponent与日期= 09/08/2017,并以{名: “Doe的”}对象

    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 
    } 
+1

添加一个例子。 –

+0

你是否在同一时间更新两个道具?或者可能没有同步,所以你会得到2个componentWillUpdate调用,也许你会混淆2 –

+0

否道具更新是基于两个不同时发生的动作。因此,无论JavaScript对象如何,this.props.date始终等于nextProps.date(是更新后的值) – BrFreek

回答

1

对待state好像它是不可变的。

尝试在浏览器的代码:

var d = new Date(); 
 
var d2 = d; 
 

 
d2.setDate(7); 
 

 
d == d2;

d2d指向同一个对象。

现在asssuming您得到您的状态:

let newDate = this.state.date

不管你什么更新newDatethis.state.date也发生了变化。你可以在你的代码中尝试自己。

将相同的情况应用于其他数据类型(如数组)。

我建议使用date-fnsthe creator of Redux stated

相关问题