代码解析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 相关文章推荐
Ucren Virtual Desktop V2.0
Nov 07 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
Apr 26 Javascript
javascript强大的日期函数代码分享
Sep 04 Javascript
javascript 数字格式化输出的实现代码
Dec 10 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 Javascript
微信小程序 简单教程实例详解
Jan 13 Javascript
快速实现jQuery多级菜单效果
Feb 01 Javascript
基于jQuery实现文字打印动态效果
Apr 21 jQuery
js调用刷新界面的几种方式
May 03 Javascript
vue 通过下拉框组件学习vue中的父子通讯
Dec 19 Javascript
解决bootstrap-select 动态加载数据不显示的问题
Aug 10 Javascript
详细聊聊vue中组件的props属性
Nov 02 Vue.js
React配置子路由的实现
手把手教你从零开始react+antd搭建项目
react antd实现动态增减表单
react 项目中引入图片的几种方式
Jun 02 #Javascript
小程序wx.getUserProfile接口的具体使用
js实现自动锁屏功能
Jun 02 #Javascript
如何将JavaScript将数组转为树形结构
Jun 02 #Javascript
You might like
分享PHP入门的学习方法
2007/01/02 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
php中生成随机密码的自定义函数代码
2013/10/21 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
微博@符号的用户名提示效果。(想@到谁?)
2010/11/05 Javascript
动态加载js和css(外部文件)
2013/04/17 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
2016/04/01 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
ejsExcel模板在Vue.js项目中的实际运用
2018/01/27 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
JS中作用域以及变量范围分析
2020/07/18 Javascript
Python删除windows垃圾文件的方法
2015/07/14 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
申请任职学生会干部自荐书范文
2014/02/13 职场文书
人力资源管理求职信
2014/08/07 职场文书
查摆剖析材料范文
2014/09/30 职场文书
学习与创新自我评价
2015/03/09 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
2015年三年级班主任工作总结
2015/05/21 职场文书
奠基仪式致辞
2015/07/30 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python