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

ReactJS useReducer代码疑问:解析...todo, complete: !todo.complete

关于React中...todo, complete: !todo.complete代码的解析

首先纠正一个小误解:...todo不是展开数组,它是对象展开运算符,作用是把原todo对象的所有属性都复制到新对象里。

你对后半部分的理解是对的——complete: !todo.complete就是把新对象里的complete属性值设置为原todo.complete的取反(原true变false,原false变true)。

整段代码的核心作用是:基于原todo对象创建一个新对象,保留原对象的所有属性,仅修改complete属性的取值。

举个实际例子:
假设原todo对象是:

const todo = { id: 1, text: "整理桌面", complete: false }

执行{ ...todo, complete: !todo.complete }后,生成的新对象是:

{ id: 1, text: "整理桌面", complete: true }

在React里这么写的原因是:React要求状态必须是不可变的,不能直接修改原状态对象(比如直接写todo.complete = !todo.complete),否则React无法检测到状态变化,也就不会触发组件重新渲染。通过创建新对象的方式更新状态,才能让React正确识别状态变更,完成页面更新。

内容的提问来源于stack exchange,提问作者olinone.in

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:50:46