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

React中如何用Hook编辑对象内isikolom数组的元素?

修改React嵌套状态中的isikolom数组元素

要修改嵌套在对象里的数组元素,必须遵循React的不可变状态原则——不能直接修改原状态对象,要逐层创建副本后再更新。以下是针对你的状态结构的具体实现方案:

核心修改函数实现

这个函数通过员工的nomorKaryawan(唯一标识)定位目标,更新指定字段:

const updateStaff = (targetNomorKaryawan, updatedFields) => {
  setStaffData(prevStaffData => {
    // 1. 复制外层状态对象
    const newStaffData = {...prevStaffData};
    // 2. 复制"Uncatagorize"分类的对象
    const updatedCategory = {...newStaffData["Uncatagorize"]};
    // 3. 映射isikolom数组,找到目标员工并创建新对象
    updatedCategory.isikolom = updatedCategory.isikolom.map(staff => {
      if (staff.nomorKaryawan === targetNomorKaryawan) {
        // 合并原数据与更新字段,生成新员工对象
        return {...staff, ...updatedFields};
      }
      // 非目标员工直接返回原对象
      return staff;
    });
    // 4. 将更新后的分类放回新状态对象
    newStaffData["Uncatagorize"] = updatedCategory;
    return newStaffData;
  });
};

调用示例

比如要修改Evan Jovian的年龄和城市:

updateStaff("2301873560", { usia: "22", kota: "Jakarta" });

可选:添加TypeScript类型定义(更安全)

你的状态用了useState<Object>,可以定义更具体的类型避免类型错误:

// 定义员工类型
interface Staff {
  nama: string;
  usia: string;
  alamat: string;
  kota: string;
  telepon: string;
  nomorKaryawan: string;
}

// 定义分类类型
interface StaffCategory {
  namakolom: string;
  isikolom: Staff[];
}

// 初始化状态时指定类型
const [staffData, setStaffData] = useState<Record<string, StaffCategory>>({
  ["Uncatagorize"]: {
    namakolom: "Uncatagorize",
    isikolom: [
      {
        nama: "Evan Jovian",
        usia: "21",
        alamat: "Jln.Pontianak III no.32",
        kota: "Bandung",
        telepon: "082125439087",
        nomorKaryawan: "2301873560",
      },
      {
        nama: "Japri Supriyanto",
        usia: "31",
        alamat: "Jln.Kebon teh no.32",
        kota: "Bogor",
        telepon: "088172736464",
        nomorKaryawan: "2301873561",
      },
    ],
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:48:17