代码解析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操作对象数组的实现代码
Apr 27 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
Jun 23 Javascript
jquery SweetAlert插件实现响应式提示框
Aug 18 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
Jun 06 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
Nov 25 Javascript
从零学习node.js之express入门(六)
Feb 25 Javascript
JS优化与惰性载入函数实例分析
Apr 06 Javascript
JavaScript变量类型以及变量作用域详解
Aug 14 Javascript
Vue2.0 axios前后端登陆拦截器(实例讲解)
Oct 27 Javascript
基于three.js编写的一个项目类示例代码
Jan 05 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
Nov 06 Javascript
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
React配置子路由的实现
手把手教你从零开始react+antd搭建项目
react antd实现动态增减表单
react 项目中引入图片的几种方式
Jun 02 #Javascript
小程序wx.getUserProfile接口的具体使用
js实现自动锁屏功能
Jun 02 #Javascript
如何将JavaScript将数组转为树形结构
Jun 02 #Javascript
You might like
文章推荐系统(三)
2006/10/09 PHP
php笔记之:php数组相关函数的使用
2013/04/26 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
各浏览器中querySelector和querySelectorAll的实现差异分析
2012/05/23 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
Vue中JS动画与Velocity.js的结合使用
2019/02/13 Javascript
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
python3中int(整型)的使用教程
2017/03/23 Python
window下eclipse安装python插件教程
2017/04/24 Python
Python中的__slots__示例详解
2017/07/06 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
CK美国官网:Calvin Klein
2016/08/26 全球购物
澳大利亚领先的在线美容商店:Facial Co
2017/10/22 全球购物
外国人聘用意向书
2014/04/01 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
中学生运动会口号
2014/06/07 职场文书
民主评议党员个人总结
2015/02/13 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers