将存储数据从一种状态反应到另一种状态

React store data from a state into another state

谁能帮我解决这个问题,我正在尝试使用下面的 gosetListReceiver() 函数从 tempList 状态获取一些属性以存储到 listReceiver 状态。

const [tempList, setTempList] = useState([]); 

const [listReceiver, setListReceiver] = useState([]);


    function gosetListReceiver() {
    let i = 0;
    while (i < tempList.length) {
        setListReceiver([
            ...listReceiver,
            {
                name: tempList[i]["name"],
                phone: tempList[i]["receiver"]
            }
        ]);

        i++;
    }
}

但是当我处于 mapping/console 之后的 listReceiver 状态时,我希望它将 3 个数组从 tempList 存储到 listReceiver 但它只有tempList 中存储的最后一项。我该如何解决这个问题?

tempList 的示例数据下方,因为我需要将名称和接收者属性存储到 listReceiver

我没有测试,但 setListReceiver() 开头的数组括号 [] 对我来说很可疑。

没有它们试试:

...
setListReceiver(
    ...listReceiver,
    {
        name: tempList[i]["name"],
        phone: tempList[i]["receiver"]
    }
);
...

或者绝对有效的方法,请查看 Array.push(...)

每次通过循环,您都在覆盖状态,从而清除您上次通过循环所做的任何事情。要解决此问题,您有两种选择。

  1. 使用设置状态的函数版本,这样您就可以始终获得最新版本的状态:
setListReceiver((prev) => [
  ...prev,
  {
    name: tempList[i]["name"],
    phone: tempList[i]["receiver"],
  },
]);

  1. 等到你创建了完整的数组,然后在最后设置一次状态:
function gosetListReceiver() {
  let i = 0;
  const newState = [...listReceiver];
  while (i < tempList.length) {
    newState.push({
      name: tempList[i]["name"],
      phone: tempList[i]["receiver"],
    });

    i++;
  }
  setListReceiver(newState);
}

P.S,这段代码看起来更像是 for 循环,而不是 while 循环:

const newState = [...listReceiver];
for (let i = 0; i < tempList.length; i++) {
  newState.push({
    name: tempList[i]["name"],
    phone: tempList[i]["receiver"],
  });
}
setListReceiver(newState);