代码解析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 相关文章推荐
jquery ui resizable bug解决方法
Oct 26 Javascript
探讨jQuery的ajax使用场景(c#)
Dec 03 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
Jun 03 Javascript
node.js中的fs.unlinkSync方法使用说明
Dec 15 Javascript
javascript求日期差的方法
Mar 02 Javascript
微信开发 微信授权详解
Oct 21 Javascript
原生javascript AJAX 三级联动的实现代码
May 04 Javascript
基于Koa2写个脚手架模拟接口服务的方法
Nov 27 Javascript
angular6 填坑之sdk的方法
Dec 27 Javascript
node中实现删除目录的几种方法
Jun 24 Javascript
layui实现左侧菜单点击右侧内容区显示
Jul 26 Javascript
如何用Node.js编写内存效率高的应用程序
Apr 30 Javascript
React配置子路由的实现
手把手教你从零开始react+antd搭建项目
react antd实现动态增减表单
react 项目中引入图片的几种方式
Jun 02 #Javascript
小程序wx.getUserProfile接口的具体使用
js实现自动锁屏功能
Jun 02 #Javascript
如何将JavaScript将数组转为树形结构
Jun 02 #Javascript
You might like
php 无限级 SelectTree 类
2009/05/19 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
理解javascript正则表达式
2016/03/08 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
名片管理系统python版
2018/01/11 Python
Python自动抢红包教程详解
2019/06/11 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
PyCharm+Miniconda3安装配置教程详解
2021/02/16 Python
戴森美国官网:Dyson美国
2016/09/11 全球购物
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
linux面试题参考答案(6)
2014/08/29 面试题
创建无烟单位实施方案
2014/03/29 职场文书
企业贷款委托书格式
2014/09/12 职场文书
会计师事务所实习证明
2014/11/16 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python