zoukankan      html  css  js  c++  java
  • setState何时同步,何时异步,为什么?

    setState何时同步,何时异步,为什么

    答案:在React库控制时,异步;否则同步。

    示例代码如下:

    constructor(props){
        super(porps);
        this.state = {
            name:"异步"
        }
    }
    test(){
        this.setState({
            name:"同步"
        })
        alert(this.state.name)
    }
    <TouchableOpacity onPress={()=>this.test()}>
        <Text>Button</Text>
    </TouchableOpacity> 
    上文TouchableOpacity中,是React库控制,此时使用setState则为异步,alert值为"异步"。

    如何才能触发同步呢?看如下代码:

    test(){
        this.setState({
            name:"同步"
        },function(){
            alert(this.state.name)
        })
    }

      此时使用回调的方式,即可触发同步,大部分开发中用到的都是React封装的事件,比如onChange、onClick、onTouchMove等,这些事件处理程序中的setState都是异步处理的。

    React是怎样控制异步和同步的呢?

    在 React 的 setState 函数实现中,会根据一个变量 isBatchingUpdates 判断是直接更新 this.state 还是放到队列中延时更新,而 isBatchingUpdates 默认是 false,表示 setState 会同步更新 this.state;但是,有一个函数 batchedUpdates,该函数会把 isBatchingUpdates 修改为 true,而当 React 在调用事件处理函数之前就会先调用这个 batchedUpdates将isBatchingUpdates修改为true,这样由 React 控制的事件处理过程 setState 不会同步更新 this.state。





  • 相关阅读:
    RabbitMQ系列教程之一:我们从最简单的事情开始!Hello World(转载)
    如何安装和配置RabbitMQ(转载)
    C++学习笔记-模板
    C++学习笔记-多态的实现原理
    C++学习笔记-多态的实现原理
    C++学习笔记-多态
    C++学习笔记-多态
    C++学习笔记-继承中的构造与析构
    C++学习笔记-继承
    C++学习笔记-封装
  • 原文地址:https://www.cnblogs.com/gooldns/p/11907812.html
Copyright © 2011-2022 走看看