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

React中使用扩展运算符更新对象时如何将变量作为动态属性名

解决方案

你需要使用ES6引入的计算属性名语法实现需求,直接用方括号[]包裹你的字段变量即可:

const onChangeCallBack = (field, value) => {
  // 用[field]标记该位置要取field变量的值作为属性名
  setObj(obj => ({...obj, [field]: value}))
}

原写法不生效的原因

直接写field: value时,JavaScript会将field识别为字符串字面量的属性名,等价于你硬编码了"field": value,自然不会读取变量存储的实际字段名。
使用方括号包裹变量后,JavaScript会优先计算方括号内的表达式结果,再将结果作为属性名赋值,完美匹配动态更新指定字段的需求。

拓展用法(表单场景简化)

如果你的回调是绑定给表单输入组件的,可以直接利用输入框的name属性进一步简化代码,不需要单独封装传field的回调:

// 统一的表单change回调
const handleInputChange = (e) => {
  const { name, value } = e.target
  setObj(prevObj => ({...prevObj, [name]: value}))
}

组件绑定示例:

<input name="title" value={obj.title} onChange={handleInputChange} />
<textarea name="body" value={obj.body} onChange={handleInputChange} />

内容的提问来源于stack exchange,提问作者Etch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:24:03