代码解析React中setState同步和异步问题


Posted in Javascript onJune 03, 2021

 React起源于Facebook的内部项目。React的出现是革命性的创新,React的是一个颠覆式的前端框架。在React官方这样介绍的它:一个声明式、高效、灵活的、创建用户界面的JavaScript库,即使React的主要作用是构建UI,但是项目的逐渐成长已经使得react成为前后端通吃的WebApp解决方案。

 angular中用的是watcher对象,vue是观察者模式,react就是state了,他们各有各的特点,没有好坏之分,只有需求不同而选择不同。

      React的官方网址:https://reactjs.org/GitHub

地址为:https://github.com/facebook/react

1.在React中,由React控制的事件处理函数,如onClick, onChange等,setState是异步的

import React, { Component } from 'react';

export default class Input extends Component {
    constructor(props) {
        super(props);    

        this.state={
            name: 'hello'
        }    
    }

    _onChange(e) {
        this.setState({
            name:' world'
        })

        console.log(this.state.name); //hello
    }

  render () {
    return (
      <div className='cp'>
        <input className='cp-input'  value={this.state.name}  onChange={this._onChange.bind(this)} type="text"/>                
      </div>
    );
  }
}

2.在原生JS监听的事件中,如addEventListener, setState是同步的

import React, { Component } from 'react';

export default class Input extends Component {
    constructor(props) {
        super(props);    

        this.state={
            name: 'hello'
        }    
    }

    _onChange(e) {
        // do something
    }


    componentDidMount() {
        let input = document.querySelector('.cp-input');
        input.addEventListener('click', ()=>{
            this.setState({
                name:' world'
            })

            console.log(this.state.name); //world
        })
    }

  render () {
    return (
      <div className='cp'>
        <input className='cp-input'  value={this.state.name}  onChange={this._onChange.bind(this)} type="text"/>                
      </div>
    );
  }
}

3.在setTimeout中,setStatet是同步的

import React, { Component } from 'react';

export default class Input extends Component {
    constructor(props) {
        super(props);    

        this.state={
            name: 'hello'
        }    
    }

    _onChange(e) {
        // do something
    }


    componentDidMount() {
        setTimeout(()=>{
            this.setState({
                name:' world'
            })
            console.log(this.state.name); //world
        }, 1000)
    }

  render () {
    return (
      <div className='cp'>
        <input className='cp-input'  value={this.state.name}  onChange={this._onChange.bind(this)} type="text"/>                
      </div>
    );
  }
}

以上就是解析React中setState同步和异步代码详解的详细内容,更多关于React setState同步和异步的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
JavaScript 模拟类机制及私有变量的方法及思路
Jul 10 Javascript
Function.prototype.bind用法示例
Sep 16 Javascript
js判断浏览器是否支持html5
Aug 17 Javascript
纯javascript移动优先的幻灯片效果
Nov 02 Javascript
Bootstrap三种表单布局的使用方法
Jun 21 Javascript
利用Jquery队列实现根据输入数量显示的动画
Sep 01 Javascript
AngularJS实现动态添加Option的方法
May 17 Javascript
基于VUE.JS的移动端框架Mint UI的使用
Oct 11 Javascript
angularjs实现table增加tr的方法
Feb 27 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
Feb 28 Javascript
GOJS+VUE实现流程图效果
Dec 01 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
Jul 18 Javascript
React配置子路由的实现
手把手教你从零开始react+antd搭建项目
react antd实现动态增减表单
react 项目中引入图片的几种方式
Jun 02 #Javascript
小程序wx.getUserProfile接口的具体使用
js实现自动锁屏功能
Jun 02 #Javascript
如何将JavaScript将数组转为树形结构
Jun 02 #Javascript
You might like
PHP 中魔术常量的实例详解
2017/10/26 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
2019/03/07 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
Python内置数据类型list各方法的性能测试过程解析
2020/01/07 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
机械工程系毕业生求职信
2013/09/27 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
先进班组材料范文
2014/12/25 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
开学第一天的感想
2015/08/10 职场文书
大学副班长竞选稿
2015/11/21 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python
Linux磁盘管理方法介绍
2022/06/01 Servers