代码解析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 相关文章推荐
Extjs入门之动态加载树代码
Apr 09 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
Dec 28 Javascript
如何用js控制frame的隐藏或显示的解决办法
Mar 20 Javascript
ext前台接收action传过来的json数据示例
Jun 17 Javascript
详解JavaScript的流程控制语句
Nov 30 Javascript
javascript实现方法调用与方法触发小结
Mar 26 Javascript
bootstrap实现图片自动轮播
Dec 21 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
Apr 13 Javascript
Webpack实现按需打包Lodash的几种方法详解
May 08 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
Jun 14 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
Dec 26 Javascript
微信小程序实现星级评分和展示
Jul 05 Javascript
React配置子路由的实现
手把手教你从零开始react+antd搭建项目
react antd实现动态增减表单
react 项目中引入图片的几种方式
Jun 02 #Javascript
小程序wx.getUserProfile接口的具体使用
js实现自动锁屏功能
Jun 02 #Javascript
如何将JavaScript将数组转为树形结构
Jun 02 #Javascript
You might like
php中文字符截取防乱码
2008/03/28 PHP
PHP中常用数组处理方法实例分析
2008/08/30 PHP
php中截取中文字符串的代码小结
2011/07/17 PHP
php将html转为图片的实现方法
2017/05/19 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
js文件缓存之版本管理详解
2013/07/05 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
2019/06/04 jQuery
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
原生JS实现留言板功能
2020/02/08 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
Python fileinput模块使用介绍
2014/11/30 Python
Python logging模块用法示例
2018/08/28 Python
使用python turtle画高达
2020/01/19 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
大学生自我评价怎样写好
2013/10/23 职场文书
公司出纳岗位职责
2013/12/07 职场文书
给老婆的保证书范文
2014/04/28 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
个人收入证明范本
2015/06/12 职场文书