react中setState更新状态的两种方式

本文深入探讨了React中setState的行为特性,揭示了在合成事件、钩子函数、原生事件和setTimeout中的同步与异步差异。通过实例解析对象式和函数式setState的使用场景,强调了在状态依赖和获取最新状态时的最佳实践。
摘要由CSDN通过智能技术生成

前言

setState在合成事件和钩子函数中是“异步”的,在原生事件和setTimeout 中都是同步的

对象式写法

setState(stateChange, [callback])

  • stateChange为状态改变对象(该对象可以体现出状态的更改)
  • callback是可选的回调函数, 它在状态更新完毕、界面也更新后(render调用后)才被调用
	state = {count:0}

	add = ()=>{
		// 对象式setState
		this.setState({count:this.state.count+1},()=>{
			console.log(this.state.count);
		})
	}

函数式写法

setState(updater, [callback])

  • updater为返回stateChange对象的函数。
  • updater可以接收到stateprops(主要区别)
  • callback是可选的回调函数, 它在状态更新、界面也更新后(render调用后)才被调用。
	state = {count:0}

	add = ()=>{
		//函数式的setState
		this.setState( state => ({count:state.count+1}),()=>{
			console.log(this.state.count)
		})
	}

总结

  • 对象式的setState是函数式的setState的简写方式(语法糖)
  • 使用原则:
    • 如果新状态不依赖于原状态 ===> 使用对象方式
    • 如果新状态依赖于原状态 ===> 使用函数方式
    • 如果需要在setState()执行后获取最新的状态数据, 要在第二个callback函数中读取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值