React setState
React setState
- 对于 setState() 相信伙伴们都用过,它是 react 官方推荐用来更新组件 state 的 API,但是对于 setState() 你真的了解吗?且待我慢慢详聊一番。
语法
- setState(arg1, [arg2])
- arg1: 对象类型,会将传入的对象浅层合并到新的 state 中。
- arg2: 可选,回调函数。
/*
* @Author: HuangBingQuan bingquan111@qq.com
* @Date: 2022-10-27 23:11:13
* @LastEditors: HuangBingQuan bingquan111@qq.com
* @LastEditTime: 2022-10-27 23:59:34
* @FilePath: /react_test/src/01-base/12-setState同步和异步.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import React, { Component } from 'react'
export default class App extends Component {
state = {
count: 1
}
render () {
return (
<div>
{this.state.count} <br />
<button onClick={this.handelAdd1()}>add1</button>
<button onClick={this.handelAdd2()}>add2</button>
</div>
)
}
handelAdd1 () { // 同步
return () => {
// this.setState({
// count: this.state.count + 1
// })
// console.log(this.state.count) 1
// this.setState({
// count: this.state.count + 1
// })
// console.log(this.state.count) 1
// this.setState({
// count: this.state.count + 1
// })
// console.log(this.state.count) 1
this.setState({
count: this.state.count + 1
}, () => {
console.log(this.state.count) //1
})
this.setState({
count: this.state.count + 1
}, () => {
console.log(this.state.count) //1
})
this.setState({
count: this.state.count + 1
}, () => {
// 状态 和真实DOM已经更新完了
console.log(this.state.count) // 2
})
}
}
handelAdd2 () { // 异步
return () => {
setTimeout(() => {
this.setState({
count: this.state.count + 1
})
console.log(this.state.count) // 2
this.setState({
count: this.state.count + 1
})
console.log(this.state.count) // 3
this.setState({
count: this.state.count + 1
})
console.log(this.state.count) // 4
}, 0)
}
}
}
/*
setState 处在同步的逻辑中,异步更新状态,更新真实dom
setState 处在异步的逻辑中,同步更新状态,同步更新真实dom
setState 接受第二个参数,第二个参数是回调函数,状态和dom更新完后就会被触发。
*/
总结
-
setState 处在同步的逻辑中,异步更新状态,更新真实dom
-
setState 处在异步的逻辑中,同步更新状态,同步更新真实dom
-
setState 接受第二个参数,第二个参数是回调函数,状态和dom更新完后就会被触发。
本文作者:HuangBingQuan
本文链接:https://www.cnblogs.com/bingquan1/p/16842287.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步