React 类组件中setState更新状态时,解构与非解构的区别是什么?
类组件中setState更新状态不同写法定时器结果不同使用解构
componentDidMount() {
const { n } = this.state
this.timer = setInterval(() => {
this.setState({ n: n + 1 })
}, 1000);
}
不使用解构
componentDidMount() {
this.timer = setInterval(() => {
this.setState({ n: this.state.n + 1 })
}, 1000);
}
为什么两种答案不一样呢,第一个只触发一次,第二个定时器有效,按理来说setState是异步的都不能出发定时器啊,有大佬帮忙解释一下吗
回复
1个回答

test
2024-09-07
这个问题跟解构、异步都没有关系。相关的知识点是闭包,读取state的时机。第一段代码只读取一次state.n
, 每次interval执行n+1
都是同一个值。第二段代码在每次interval执行的时候读取state.n
,在最新值的基础上+1
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容