componentWillReceiveProps/getDerivedStateFromProps 的目的
Purpose of componentWillReceiveProps/getDerivedStateFromProps
我刚刚开始学习 React,我遇到了一些我在任何地方都找不到解释的东西。
在我读到的关于 React 组件的所有 book/blog 中,我都看到过这样的声明:组件 props
是不可变的。更改组件属性的唯一方法是重新创建它。不过,情况似乎并非如此。
在阅读“行动中的反应”和“快速反应”时,我 运行 对 componentWillReceiveProps
的引用以及在 props
时使用此方法的解释(不是状态)是要改变的。我看过这方面的文档(以及较新的 getDerivedStateFromProps
函数)。
componentWillReceiveProps
的文档指出:
componentWillReceiveProps() is invoked before a mounted component receives new props.
getDerivedStateFromProps
的文档指出:
This method exists for rare use cases where the state depends on changes in props over time.
这些都没有解释如何在组件的生命周期中随时接收(和更改?)不可变属性。
那么,这里到底发生了什么?如果无法更改道具,这些 functions/methods 是做什么用的?或者,books/blogs 是不是弄错了,这些毕竟不是一成不变的?
一个组件可以是 re-rendered 和 new/updated/different 道具。考虑以下组件:
function Parent () {
const [count, setCount] = useState(0);
setInterval(() => setCount(count + 1), 1000);
return (
<CounterDisplay count={count} />
)
}
CounterDisplay 组件将每秒获得一次 re-rendered 和一个新的 count
道具。如果 CounterDisplay 需要在 re-rendering.
之前响应新道具,它可以实现 componentWillReceiveProps
实际上,这在 运行 最近版本的 React 项目中很少见。我已经很多年没有在 React 组件中实现 componentWillReceiveProps
方法了。
我刚刚开始学习 React,我遇到了一些我在任何地方都找不到解释的东西。
在我读到的关于 React 组件的所有 book/blog 中,我都看到过这样的声明:组件 props
是不可变的。更改组件属性的唯一方法是重新创建它。不过,情况似乎并非如此。
在阅读“行动中的反应”和“快速反应”时,我 运行 对 componentWillReceiveProps
的引用以及在 props
时使用此方法的解释(不是状态)是要改变的。我看过这方面的文档(以及较新的 getDerivedStateFromProps
函数)。
componentWillReceiveProps
的文档指出:
componentWillReceiveProps() is invoked before a mounted component receives new props.
getDerivedStateFromProps
的文档指出:
This method exists for rare use cases where the state depends on changes in props over time.
这些都没有解释如何在组件的生命周期中随时接收(和更改?)不可变属性。
那么,这里到底发生了什么?如果无法更改道具,这些 functions/methods 是做什么用的?或者,books/blogs 是不是弄错了,这些毕竟不是一成不变的?
一个组件可以是 re-rendered 和 new/updated/different 道具。考虑以下组件:
function Parent () {
const [count, setCount] = useState(0);
setInterval(() => setCount(count + 1), 1000);
return (
<CounterDisplay count={count} />
)
}
CounterDisplay 组件将每秒获得一次 re-rendered 和一个新的 count
道具。如果 CounterDisplay 需要在 re-rendering.
componentWillReceiveProps
实际上,这在 运行 最近版本的 React 项目中很少见。我已经很多年没有在 React 组件中实现 componentWillReceiveProps
方法了。