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同步/异步问题的主要内容,如果未能解决你的问题,请参考以下文章