React 类组件中setState更新状态时,解构与非解构的区别是什么?

作者站长头像
站长
· 阅读数 13

类组件中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个回答
avatar
test
2024-09-07

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

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