前言
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可以接收到state和props。(主要区别)callback是可选的回调函数, 它在状态更新、界面也更新后(render调用后)才被调用。
state = {count:0}
add = ()=>{
//函数式的setState
this.setState( state => ({count:state.count+1}),()=>{
console.log(this.state.count)
})
}
总结
- 对象式的
setState是函数式的setState的简写方式(语法糖) - 使用原则:
- 如果新状态不依赖于原状态 ===> 使用对象方式
- 如果新状态依赖于原状态 ===> 使用函数方式
- 如果需要在
setState()执行后获取最新的状态数据, 要在第二个callback函数中读取
React setState详解:异步与同步行为
本文深入探讨了React中setState的行为特性,揭示了在合成事件、钩子函数、原生事件和setTimeout中的同步与异步差异。通过实例解析对象式和函数式setState的使用场景,强调了在状态依赖和获取最新状态时的最佳实践。
1158

被折叠的 条评论
为什么被折叠?



