修改对象的useState数组

问题描述 投票:0回答:2

我有一个 useState 对象数组:

const [processes, setProcesses] = useState([]);

从数据库获取值后,它变成:

[{processId: 0, status: "true"},
{processId: 1, status: "true"}]

现在我想为其添加新属性,使其变得像:

[{processId: 0, name:"process1",status: "true",active:"true"},
{processId: 1, name:"process2",status: "true",active:"true"}]

名字的由来:

var allProcNames=["process1","process2"]

我尝试过以下方法:

var objProc = JSON.parse(JSON.stringify(processes));

objProc.map((proc) => ({
        ...proc,
        name: procNames[proc.processId],
        active: true,
    }));

但是它只记录相同的内容:

[{processId: 0, status: "true"}]

除了向数据库添加新列作为进程名称之外,还能做什么?

reactjs use-state arrayobject
2个回答
2
投票

您可以像这样更改代码。

    let temp = objProc.map((proc) => {
      return ({
        ...proc,
        name: procNames[proc.processId],
        active: true,
    }));

   setProcesses(temp);

在这种情况下,您可以将所有过程数据存储在 temp 上,然后设置 state 上的值。 别忘了回来。这是有必要的。


1
投票

你不应该尝试直接改变状态。 (检查参考https://reactjs.org/docs/react-component.html#setstate

您可以使用

filter
map
方法并用全新的状态更新当前状态:

const [processes, setProcesses] = useState([
{processId: 0, status: "true"},
{processId: 1, status: "true"}
]);

const arrayObjUpdater = () => {
  const newArrayState = processes.map((currentProcess, idx) => ({
          ...currentProcess,
          name: `proccess${idx}`,
          active: "true"
  }));
  console.log(newArrayState); // See output below

  return setProcesses(newArrayState);
}

arrayObjUpdater();
// Output: [{processId: 0, name:"process1",status: "true",active:"true"}, {processId: 1, name:"process2",status: "true",active:"true"}]

© www.soinside.com 2019 - 2024. All rights reserved.