1. 程式人生 > 程式設計 >程式碼解析React中setState同步和非同步問題

程式碼解析React中setState同步和非同步問題

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等,setStahttp://www.cppcns.comte是非同步的

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
    }

  rend
程式設計
客棧
er () { return ( <div className='cp'> <input className='cp-input' value={this.state.name} onChange={this._onChange.bind(this)} type="text"/> </dwww.cppcns.comiv> ); } }

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

import React,{ Component } from 'react';

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

        this.state={
            na程式設計客棧
me: '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同步和非同步的資料請關注我們其它相關文章!