【发布时间】:2023-03-19 18:37:01
【问题描述】:
我刚刚学习 React,遇到了一些我无法在任何地方找到解释的东西。
在我读过的关于 React 组件的每一本书/博客中,我都看到过这样的声明:组件 props 是不可变的。更改组件属性的唯一方法是重新创建它。不过,情况似乎并非如此。
在阅读“React in Action”和“React Quickly”时,我遇到了对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.
这些都没有解释如何在组件的生命周期中随时接收(和更改?)不可变道具。
那么,这里到底发生了什么?如果道具无法更改,这些功能/方法有什么用?或者,书籍/博客是不是弄错了,毕竟它们真的不是一成不变的?
【问题讨论】:
-
对于那些对这个问题投了反对票的人,请理解您几乎到处都能找到的描述将 React 组件描述为具有不可变的 props。这是非常令人困惑和误导的。道具不能从组件内部更改,但显然它们可以由父级更改。这是生命周期的一个怪癖,在我看到的任何地方都没有真正解释,直到@ray_hatfield 指出它。
标签: javascript reactjs react-hooks react-lifecycle