当您拥有componentDidUpdate时,为什么要使用getDerivedStateFromProps?

杰米·亚丁

我对react 16的新生命周期感到困惑,getDerivedStateFromProps用例。以下面的代码为例,因为我可以使用componentDidUpdate实现我想要的功能,所以根本不需要getDerivedStateFromProps。

export class ComponentName extends Component {
  //what is this for?
  static getDerivedStateFromProps(nextProps, prevState) {

    if (nextProps.filtered !== prevState.filtered && nextProps.filtered === 'updated') {
      return {
        updated: true //set state updated to true, can't do anything more?
      };
    }

    return null;

  }

  componentDidUpdate(prevProps, prevState) {
    if(prevProps.filtered !== this.state.filtered && this.state.filtered === 'updated'){
      console.log('do something like fetch api call, redirect, etc..')
    }
  }

  render() {
    return (
      <div></div>
    );
  }
}
高塔姆·奈克(Gautam Naik)

这篇文章

至于componentWillReceiveProps被删除,我们需要更新是根据道具的变化状态的一些手段-社会决定引进新的-静态的-方法来处理这个问题。

什么是静态方法?静态方法是类中存在的方法/函数,而不是其实例。最容易想到的区别是static方法无法访问此方法,并且在它前面有关键字static。

好的,但是如果函数无法访问此函数,我们如何调用this.setState?答案是-我们没有。相反,该函数应返回更新后的状态数据;如果不需要更新,则返回null

在此处输入图片说明

返回值的行为类似于当前setState值-您只需要返回更改的部分状态,所有其他值将被保留。

您仍然需要声明组件的初始状态(在构造函数中或作为类字段)。

在组件的初始安装和重新渲染时都会调用getDerivedStateFromProps,因此您可以使用它,而不用基于构造函数中的prop创建状态。

如果你同时声明getDerivedStateFromProps,并componentWillReceivePropsgetDerivedStateFromProps将被调用,你会看到在控制台的警告。

通常,您将使用回调来确保在实际更新状态时调用了某些代码-在这种情况下,请componentDidUpdate改用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

拥有WebView时为什么要使用ImageView?

当您拥有控制器类的单元提示时,为什么要使用Spring's Mock MVC

您何时/为什么要使用QUOTENAME?

当您拥有AppCompatActivity和标准库时,为什么要包括最低SDK版本?

当我们在方法类中拥有私有属性时,为什么要使用final作为修饰符

当您只能使用类型时,为什么要使用泛型

为什么会有Java单例类?您什么时候需要使用一个

当RAM中有足够的可用空间时,为什么要使用swap?

创建带有关联指针的对象时,为什么要使用“ new”?

当只有一个实现类时,为什么要使用一个接口?

当我们有IDistributedCache时,为什么要使用IMemoryCache?

我们已经有了StringBuilder时为什么要使用StringJoiner?

当我有应用程序网关时为什么要使用Azure APIM

为什么只有一个线程时需要使用线程锁定?(蟒蛇)

当python中有.discard(elem)时,为什么要使用.remove(elem)?

当您可以通过POST执行所有操作时,为什么还要使用REST API?

如果您已经拥有资源,为什么将ETag设置为必须的要求?

为什么我有时不需要使用“get”而有时需要使用“get”进行过滤?

使用 tkinter 时,为什么要使用“间接”回调?

为什么我有时需要使用JSON.stringify而有时不需要

当您拥有许多具有相同行为和动画但具有不同Sprite图像的角色时,使用的最佳结构是什么?

为什么拥有root特权的用户不再使用〜?

在JavaScript中返回时为什么要使用括号?

范围反转时为什么要使用range_iterator?

通过ajax提交时为什么要使用表单标签?

在记录python时为什么要使用注释?

通过AJAX上传文件时,为什么要使用FormData?

当数组更快时,为什么要使用列表?

当显示缓慢时,为什么要使用本机反应