setState与异步

场景

学过react的人都知道,react的setState是异步的,如

state = {
    text: "111"
}
handleChange() {
	this.setState({
		text: "222"
	})
	console.log(this.state.text)  // 111
}

得到的结果,是111,而不是我们期望中的222,而一般我们的解决办法都是,传入第二个回调函数

state = {
    text: "111"
}
handleChange() {
	this.setState({
		text: "222"
	}, function() {
		console.log(this.state.text)  // 222
	})
}

第二个回调函数,就会在异步执行完成之后触发。
很多人都觉得,这样的异步操作,使得代码写起来更麻烦的,但是你知道react为什么要把setState设置成异步的吗????

高效地批量更新

在react的中,更新state的操作,即setState,会把修改state的更新操作,放到一个队列中,而不会马上执行。当组件进入可更新state的状态的时候,会在队列中把所有可以更新的state进行更新操作,即实现了 高效地批量更新state

提高性能

举一个简单的例子,有一个对话框组件,假如更新的同步的,那么收到信息的瞬间,就去更新state数据。此时如果有很多信息一直发过来,然后每次收到一条信息,就去同步更新一次,会浪费了好多性能,而且由于一直更新state,导致组件也一直被重新渲染,用户的体验也会很不好。
而更新是异步的话,也仅仅有几毫秒的延迟,用户也几乎感觉不到,并且可以将很多的更新一次性的批量更新,性能也会大大提升

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值