为什么在React的“提升状态”示例中不需要`componentWillReceiveProps`?

时间:2017-12-06 09:42:17

标签: javascript reactjs

我正在使用React开发一个网页,并对"Lifting Stat Up"示例提出了一些问题(我粘贴了完整代码here的链接以供快速参考),这与什么不一致我在自己的项目中遇到过。

我的问题是关于这一部分:

    <TemperatureInput
      scale="c"
      temperature={celsius}
      onTemperatureChange={this.handleCelsiusChange} />

当用户输入新值时,celsius将被重新计算(由调用TemperatureInput的{​​{1}}中的回调函数触发,然后触发handleCelsiusChange) ,并作为render之一传递给props。但是在TemperatureInput的定义中,为什么没有定义TemperatureInput?在我的实践中,如果componentWillReceiveProps仅在构造函数中分配,则在值更改时不会自动更新。正如文档所说,它不会创建新元素,只是为了提高性能而更新现有元素。如果没有创建新实例,则不会调用构造函数,因此如果没有props函数,this.props将不会更新。

以上所有内容与我的实践一致,但与示例无关。为什么更新componentWillReceiveProps时,为什么componentWillReceiveProps不需要this.props

1 个答案:

答案 0 :(得分:2)

在这种情况下,constructorprops没有做任何特别的事情,只是用React.Component调用super()构造函数,无论如何都是这样做的。例如,如果它是从道具设置一些状态,那么你需要一个componentWillReceiveProps,因为你需要在道具改变时更新状态。

当组件获得新的props时,构造函数不再被调用,因为它已经是一个实例,而是反应更新组件实例上的props,并再次调用render(),所以{{}中的道具1}}将是更新的道具。如果您定义了render(),则会在调用componentWillReceiveProps;

之前调用它