记一次react报错(关于getDerivedStateFromProps)

在使用react16的时候遇到了:
componentWillReceiveProps has been renamed, and is not recommended for use;这个警告。

官方提供的解决方法有:

  • 移动到componentDidUpdate
  • 移至静态getDerivedStateFromProps
  • 在非严格模式下使用UNSAFE_componentWillReceiveProps

使用componentDidUpdate替代componentWillReceiveProp,会有部分场景不适用,需要看情况使用

使用UNSAFE_componentWillReceiveProps,未来react版本升级会导致不可用。

综上:静态getDerivedStateFromProps替代componentWillReceiveProp是相对比较合适的方案。

getDerivedStateFromProps

这个生命周期的功能实际上就是将传入的props映射到state上面。
getDerivedStateFromProps是一个静态函数,也就是这个函数不能通过this访问到class的属性,也并不推荐直接访问属性。而是应该通过参数提供的nextProps以及prevState来进行判断,根据新传入的props来映射到state。

该函数必须有返回值。当props传入的内容不需要影响state,就必须返回一个null

static getDerivedStateFromProps(nextProps, prevState) {
    const {type} = nextProps;
    // 当传入的type发生变化的时候,更新state
    if (type !== prevState.type) {
        return {
            type,
        };
    }
    // 否则,对于state不进行任何操作
    return null;
}

getDerivedStateFromProps和componentWillReceiveProps的区别

当外部多个属性在很短的时间间隔之内多次变化,就会导致componentWillReceiveProps被多次调用。这个调用并不会被合并,如果这次内容都会触发异步请求,那么可能会导致多个异步请求阻塞。

reactsetState操作是会通过transaction进行合并的,由此导致的更新过程是batch的,而react中大部分的更新过程的触发源都是setState,所以render触发的频率并不会非常频繁

参考:https://www.jianshu.com/p/50fe3fb9f7c3

posted @ 2020-07-07 15:02  挖坑的前端狗  阅读(4920)  评论(0编辑  收藏  举报