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

React函数组件切换输入框时对象其他属性变为undefined求助

问题原因

函数组件的useState不具备类组件setState的自动合并对象属性的功能,每次调用更新方法都会直接替换整个状态值。
你当前的handlerOnChange写法直接用仅包含当前修改字段的对象覆盖了原有heldItems:

const handlerOnChange = (e, type) => {
    setHeldItems({
        [type]: e.target.value,
    });
};

比如你先输入plu的值,此时heldItems会变成{plu: '你输入的内容'},原本默认的price等属性会被直接删除。等你再切换到price输入框输入内容时,又会把heldItems覆盖为{price: '你输入的价格'},plu属性丢失,就会显示undefined。

解决方案

修改handlerOnChange的写法,更新状态时先解构原有状态的所有属性,再覆盖需要修改的字段即可,推荐使用函数式更新保证拿到的是最新的状态值:

const handlerOnChange = (e, type) => {
    setHeldItems(prevState => ({
        ...prevState,
        [type]: e.target.value,
    }));
};

如果提交数据后需要重置输入框,在handlerOnSubmit逻辑末尾调用setHeldItems重置为初始空对象即可:

setHeldItems({
    salesno: '',
    plu: '',
    price: '',
    dateandtime: '',
});
setEdit({});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:06:03