我正在使用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
?
答案 0 :(得分:2)
在这种情况下,constructor
对props
没有做任何特别的事情,只是用React.Component
调用super()
构造函数,无论如何都是这样做的。例如,如果它是从道具设置一些状态,那么你需要一个componentWillReceiveProps
,因为你需要在道具改变时更新状态。
当组件获得新的props时,构造函数不再被调用,因为它已经是一个实例,而是反应更新组件实例上的props,并再次调用render()
,所以{{}中的道具1}}将是更新的道具。如果您定义了render()
,则会在调用componentWillReceiveProps
;