如何使用componentwillreceiveprops模拟useeffect?

xtupzzrd  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(252)

我更熟悉功能组件,但我必须修复一些先前构建的类组件。我想做的是,

useEffect(() => {
    if (state1) {
        // do this
        // change state state1 -> false
    }
}, [state1])

在类组件中类似这样的内容。我尝试的是

componentWillReceiveProps = (nextProps) => {
    if (nextProps.state1 !== this.props.state1) {
      if (nextProps.state1) {
          // do this
      } else {
        // revert this
      }
      // update state
      this.setState({ state1: !this.state.state1 });
    }
  }

显然,这很奇怪。但是我很困惑,因为 componentWillReceiveProps 收到 prop 作为一个参数。因此,我不确定我应该如何将状态设置为检测状态的变化。
有什么帮助吗?

eufgjt7s

eufgjt7s1#

您可能希望使用componentdidupdate,而不是componentwillreceiveprops。组件WillReceiveProps将从react中删除,并且它经常被误用。
使用componentdidupdate,您将执行以下操作:

componentDidUpdate(prevProps, prevState) {
  if (this.state.state1 !== prevState.state1) {
    if (this.state.state1) {
      // do this
      // change state state1 -> false
      this.setState({ state1: false });
    }
  }
}

如果您也需要在第一次渲染后运行此代码,则可能需要在componentdidmount中执行类似的代码。

相关问题