美文网首页
react 中 this.setState() 用法

react 中 this.setState() 用法

作者: 百里战神 | 来源:发表于2021-05-19 15:28 被阅读0次

    this.setState() 是 react 中类组件的常用用法,是用于更新组件中 this.state 对象的值的。但是这个 api 是有挺多注意事项的,在此记录说明一下。

    1、调用 this.setState() 后, this.state 对象中的值不会立刻更新

    ...
    this.state={a: 1}
    ...
    update = () => {
        console.log(this.state.a); // 1
        this.setState({a: 2});
        console.log(this.state.a); // 1,值不会立刻改变
    }
    

    如上代码,可以看到输出 this.state.a 的值并不是 2 ,说明调用 this.setState() 后,this.state 对象中的值是不会立刻更新的。
    调用 this.setState() 后,会触发 4 个生命周期的执行:

    • shouldComponentUpdate
    • componentUpdate
    • render
    • componentDidUpdate

    在执行到 render 时,this.state 的值才会更新。如果在执行 shouldComponentUpdate 时,如果返回 false ,会阻止后面三个生命周期的执行,但是这种情况下,this.state 的值也是会更新的。

    2、多次调用 this.setState() 会产生合并效果

    this.setState({a:1});
    this.setState({b:2});
    
    //相当于
    this.setState({a:1, b:2})
    

    在调用 this.setState() 后,react 会将这次更改事件放进一个队列中,当同步执行过程的所有逻辑都执行完毕,才会执行四个生命周期,在 render 中进行更新 this.state (或者在 shouldComponentUpdate 返回为 false 时更新)。

    3、 this.setState() 的第一个参数可以是函数

    查看官方文档,里面的说明是这样的:

    setState(updater, [callback])

    其中 updater 是用来更新 this.state 的函数或者是对象,callback回调是在 this.state 更新之后的回调,在回调函数中,是确保了 this.state 是已经更新的。
    其中 updater 是更新函数:

    (state, props) => stateChange

    其中 state 就是 this.state 的引用,这是最新的 this.state 的值。
    props 是 this.props 的引用,也是最新的 this.props 的值。
    如果更新 this.state 是依赖更新前的 this.state 或者是 this.props 的,那举例如下:

    this.setState((state, props) => {
      return {a: state.a + props.a};
    });
    

    相关文章

      网友评论

          本文标题:react 中 this.setState() 用法

          本文链接:https://www.haomeiwen.com/subject/ftnddltx.html