getDerivedStateFromProps

getDerivedStateFromProps

正如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才能在初始渲染之前初始化状态。
  • 10-07 17:46