【发布时间】:2018-03-23 12:20:23
【问题描述】:
正如this React Github issue 中所读,我看到的越来越多
render()的成本比较小
在 React 16.3 中,我想知道为什么要使用新的 getDerivedStateFromProps 而不是 componentDidUpdate?
想象一下这个例子:
getDerivedStateFromProps(nextProps, prevState) {
if (!prevState.isModalOpen && nextProps.isReady) {
return { isModalOpen: true };
}
}
对
componentDidUpdate(prevProps, prevState) {
if (!prevState.isModalOpen && this.props.isReady) {
this.setState({ isModalOpen: true });
}
}
后者似乎更简单,因为它只使用现有的 API,并且看起来就像我们过去在 componentWillReceiveProps 中所做的那样,所以我不明白为什么用户会选择 getDerivedStateFromProps?有什么好处?
谢谢!
【问题讨论】:
-
让我也想知道这一点。在组件的 init 和组件的更新中执行相同的逻辑似乎是一种方便的方法。在 React 15 中,我编写了许多在构造函数和 CWP 中调用相同函数的组件。因为这对你来说是一个单一的功能。 twitter.com/dan_abramov/status/960305777968930816
-
好吧,我认为你是对的,因为这是在 init 上调用的,而 cDU 仅在渲染后调用。但我相信这两个函数之间的唯一区别是,如果你在 cDU 中进行操作,就会多渲染 1 个。
标签: reactjs