正如this React Github issue中所读到的,我越来越多地看到
在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?有什么好处?
谢谢!
最佳答案
因此Dan Abramov answered on Twitter似乎有两个原因,为什么您应该使用getDerivedStateFromProps
而不是componentDidUpdate
+ setState
:
getDerivedStateFromProps
在初始化渲染之前被调用,因此您可以在此函数中初始化状态,而不必使用构造函数来初始化它。当前,您必须具有构造函数或
componentWillMount
才能在初始渲染之前初始化状态。