React--setState同步/异步问题

Posted Houqh95

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React--setState同步/异步问题相关的知识,希望对你有一定的参考价值。

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触发render方法吗

react setState

react setState 的用法

React:setState 不会导致重新渲染?

如何立即更新 React setState

react-native this.setState 导致代码停止运行