1、react 解决this.setState修改数据异步问题
解决异步:
1、nextState(推荐)
import React from 'react'
class Home extends React.Component{
constructor(props){
super(props);
this.state = {
data :0
}
}
componentDidMount(){
this.timer = setInterval(()=>{this.setState({date:new Date()})},1000)
}
componentWillMount(){
clearInterval(this.timer)
}
render(){
return(
<React.Fragment>
<p>{this.state.data}</p>
<button onClick={this.add}>点击</button>
</React.Fragment>
)
}
// 异步问题复现
// add = ()=>{
// this.setState({
// data:this.state.data+1
// })
// this.setState({
// data:this.state.data+2
// })
// console.log(`点击${this.state.data}`);
// }
// 解决方法一
add = ()=>{
this.setState(nextState=>({data:nextState.data+1}))
this.setState(nextState=>({data:nextState.data+2}))
console.log(`点击${this.state.data}`)
}
//方法二setTimeout():
add = ()=>{
setTimeout(()=>{
this.setState({data:this.state.data+1})
this.setState({data:this.state.data+2})
},0)
}
//方法三事件委托:
componentDidMount(){
this.timer = setInterval(()=>{this.setState({date:new Date()})},1000);
document.getElementsByTagName("button")[0].addEventListener('click',
()=>{
this.setState({
data:this.state.data+1
})
console.log(`点击${this.state.data}`)
})
}
export default Home;
本文作者:雪糕战士
本文链接:https://www.cnblogs.com/nothingness/p/13562821.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
react
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步