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 方法了。