ReactJS更新State后打印旧值:为何调用updateData后输出1?
问题解析
首先看你的代码,存在两个关键问题:
笔误导致状态未更新
你声明的状态更新函数是setAddress,但在updateData里调用的是setAmount——这个函数根本不存在,所以address的状态从头到尾都没被修改,控制台自然打印初始值1。React状态更新的异步特性(假设修正笔误后)
就算你把setAmount改成setAddress("2"),当前console.log(address)依然会打印1。原因是React的useState更新是异步批量处理的,状态变更不会立即生效:- 调用
setAddress后,React会标记组件需要重新渲染,但不会立刻更新address变量 - 当前
updateData函数执行时,访问的还是该函数创建时捕获的旧状态值 - 要查看更新后的状态,需要在组件重新渲染后(比如在
useEffect里监听address变化)
- 调用
修正后的代码示例:
const [address, setAddress] = useState("1"); // 监听address变化,打印更新后的值 useEffect(() => { console.log(address); }, [address]); const updateData = () => { setAddress("2"); // 修正笔误,调用正确的更新函数 }
内容的提问来源于stack exchange,提问作者ali
相关产品推荐
相关产品推荐

