2

我正在尝试迁移我的应用程序以执行 React v16.3.* API,并且很难摆脱componentWillReceiveProps. 我有依赖于它的组件,并在其中调用组件的其他功能。

因为getDerivedStateFromProps是静态的,我不能再轻易地做到这一点,我需要如何适当地帮助。特别是对于这种情况,我有一个超时功能,只要收到新的道具就会重置。目前情况如下:

componentWillReceiveProps (nextProps) {
  clearTimeout(this.timeout)
  this.timeout = setTimeout(() => {
    this.dismiss(null, nextProps)
  }, nextProps.timer)
}

如您所见,我拥有this.timeoutthis.dismiss一旦更改为getDerivedStateFromProps. 我该如何处理?有没有办法将其更改为getDerivedStateFromProps静态函数,还是我必须以完全不同的方式进行?

4

1 回答 1

2

正如@Kyle 提到的,这不属于 in getDerivedStateFromProps,但可能不是很明显为什么你可以安全地在componentDidUpdate.

你可以这样做的原因是你只是清除和设置计时器,在 React 更新 DOM 并完成执行之前,这不会影响任何事情。因此,在预渲染componentWillReceiveProps或更新后执行此操作没有区别componentDidUpdate

componentDidUpdate()
  clearTimeout(this.timeout)
  this.timeout = setTimeout(() => {
    this.dismiss(null, this.props)
  }, this.props.timer)
}

React 博客有一些示例迁移可能会有所帮助。

于 2018-04-17T22:06:44.027 回答