You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何用const声明的useState变量可更新?count++为何不可用?

关于React useState的两个疑问解答

一、用const声明的count为啥能"更新"?

首先要明确:你根本没修改这个const声明的count变量。

React函数组件的运行逻辑是:每次状态更新时,整个组件函数(这里就是App)会重新执行一遍。每次执行时,useState(0)会返回新的状态值——这个新的count是一个全新的const变量,和上一次渲染的count完全不是同一个东西。

页面上数字增长,是因为组件重新渲染后,用了新的count值渲染<h1>。而之前渲染时的count变量(比如第一次的count=0)始终是const,没被修改过,只是后续渲染时换了新的变量而已。

补充一句:你代码里的console.log(count)其实输出的是当前increase函数捕获的旧count值,比如第一次点击按钮,console会输出0,而不是更新后的1——因为新的count要等下一次组件渲染才会生成,当前的increase函数还是用的上一次渲染时的count。

二、为啥能用count + 1更新状态,却不能用count++?

核心原因有两点:

  • count是const变量,count++是赋值操作:count++等价于count = count + 1,const声明的变量不允许被重新赋值,直接写count++会触发语法错误。
  • 即使是let,count++也不适合更新状态:count++是先返回当前值,再执行自增。如果写setCount(count++),传给setCount的其实是旧的count值,完全达不到更新的目的,还违背了React状态只能通过setter函数更新的原则。

如果要基于当前最新状态更新,更推荐用函数式更新的写法:

setCount(prevCount => prevCount + 1)

这种写法能确保拿到的是最新的状态值,避免闭包导致的旧值问题。

内容的提问来源于stack exchange,提问作者chu-js

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:05:22