gpt4 book ai didi

javascript - 为什么 `componentWillReceiveProps` 在 React 的 "Lifting state up"示例中不是必需的?

转载 作者:行者123 更新时间:2023-11-30 14:53:54 25 4
gpt4 key购买 nike

我正在使用 React 开发网页,对 "Lifting Stat Up" 有一些疑问示例(我粘贴了完整代码的链接here 以供快速引用),这与我在自己的项目中遇到的情况不一致。

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

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

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

以上所有这些都符合我的做法,但与示例不符。为什么示例中不需要 componentWillReceiveProps 来更新 this.props

最佳答案

在这种情况下,constructor 没有对 props 做任何特殊的事情,它只是用 调用 React.Component 构造函数>super() 这就是它无论如何都会做的事情。例如,如果它从 props 设置一些状态,那么您将需要一个 componentWillReceiveProps,因为您需要在 props 更改时更新状态。

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

关于javascript - 为什么 `componentWillReceiveProps` 在 React 的 "Lifting state up"示例中不是必需的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47671122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com