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

如何仅复制对象中useState已声明的属性到目标useState状态

仅复制对象中已在useState声明的属性到目标状态

当前代码直接合并data对象时,会把data中不属于初始userData的属性(比如village)也混入结果里,要实现只保留userData原有声明的属性,可通过以下几种方式解决:

方法一:基于现有state的键过滤属性

修改useEffect中的状态更新逻辑,遍历原有userData的键,仅提取data中对应键的属性:

useEffect(() => {
  setUserData((pre) => {
    const filteredData = Object.fromEntries(
      Object.keys(pre).map(key => [key, data[key]])
    );
    return { ...pre, ...filteredData };
  });
}, []);

通过Object.keys(pre)获取原有状态的所有键,再从data中提取对应值并重组为新对象,最后和原有状态合并,避免混入额外属性。

方法二:复用初始state模板

将初始状态抽离为独立变量,基于这个模板的键来过滤data,后续修改状态结构时无需调整过滤逻辑:

const SellDashBoard = () => {
  const initialUserData = {
    name: '',
    age: '',
    number: '',
  };
  const[userData, setUserData] = useState(initialUserData);

  const data = {
    name: 'Ram',
    age: '21',
    village: 'pithawaiaya'
  };

  useEffect(() => {
    setUserData((pre) => {
      const filteredData = Object.fromEntries(
        Object.keys(initialUserData).map(key => [key, data[key]])
      );
      return { ...pre, ...filteredData };
    });
  }, []);

  return (
    <div>
      
    </div>
  );
};

方法三:手动提取目标属性(适合属性较少的场景)

如果userData的属性数量不多,直接解构data中需要的属性进行合并,逻辑更直观:

useEffect(() => {
  setUserData((pre) => {
    const { name, age } = data;
    return { ...pre, name, age };
  });
}, []);

内容的提问来源于stack exchange,提问作者ram pratap singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:58:14