React的this.setState的异步问题

React的this.setState的异步问题

先看一个问题描述

import React from 'react';
export default class Home extends React.Component{
    constructor(props){
        super(props);
        this.state={
            country:""
        }
    }
    country_search(){
        console.log(this.state.country)
    }
    render() {
        return (
            <div>
                    <input
                    	type="text"
                    	placeholder={global["text"]["search_info"]} 
                    	onInput={this.country_search.bind(this)}
                    	value={this.state.country} 
                    	onChange={(e)=>{this.setState({country:e.target.value})}}
                    />
            </div>
        )
    }
}

错误场景:onInput中console.log的时候,控制台输出的内容总比实际输入的内容少一位

错误原因:this.setState是异步执行

详解:根据js的执行代码的顺序,异步的操作会在正常js执行完之后继续执行,所以当执行到**cconsole.log()**的时候,this.state.country并没有修改,所以控制台打印总是少一位。

解决方案:

一、使用setTimeout

修改函数country_search

country_search(){
        setTimeout(()=>{
            console.log(this.state.country)
        },0);
    }

二、先保存后调用



		<input
               	type="text"
               	placeholder={global["text"]["search_info"]} 
               	onInput={this.country_search.bind(this)}
               	value={this.state.country} 
               	onChange={(e)=>{  //----修改的地方
				this.setState({
				   country:e.target.value
				},() => {
				  console.log(this.state.country)
				})
			}}
 		/>

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值