javascript - 如何使用状态 Hook 更新数组的单个元素?

标签 javascript reactjs react-hooks

这是我正在处理的代码部分,

这是我的钩子(Hook)

const [array, setArray] = useState(
    JSON.parse(localStorage.getItem("notes")) ?? []
  );

这是函数,

  const save = () => {
    let info = one.current.value;
    console.log(newIndex, " and ", info);
    console.log("this si array element -> ", array[newIndex - 1]);
    array[newIndex - 1] = info;
    if (newIndex !== undefined) {
      setArray((e) => {
        return e.map((e1, i) => {
          if (i + 1 === newIndex) {
            return [...e ];
          }
        });
      });
    }
  };

info 有我想更新的正确输入,newIndex 有我想更新的元素的索引。

你能建议我在这部分需要改变什么吗,这是上面功能的一部分,

setArray((e) => {
        return e.map((e1, i) => {
          if (i + 1 === newIndex) {
            return [...e ];
          }
        });

最佳答案

要更新您的阵列,您不需要映射任何东西。你只需要复制数组,在右边的索引处修改复制的数组并返回复制的数组。 React 会处理剩下的事情。

复制数组很重要,否则 React 不会注意到更改。 useState 只记住数组在内存中的地址。只有通过具有新地址的新数组,useState 才会真正触发。

以下是我对您的 save() 函数的看法:

const save = () => {
let info = one.current.value;
if (newIndex !== undefined) {
  console.log(newIndex, " and ", info);
  console.log("this is array element -> ", array[newIndex - 1]);
  setArray((e) => {
    let temp = [...e];
    temp[newIndex - 1] = info;
    return temp;
  });
}
};

试过codesandbox中的代码,我想这就是你想要的。

关于javascript - 如何使用状态 Hook 更新数组的单个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74234468/

相关文章:

javascript - 如何选择数组中的图像进行淡入和淡出

javascript - 调整 react 表大小

reactjs - React useState 返回具有两种不同条件的假图像

javascript - 仅更新 react 对象数组中的一个属性

javascript - react :write to json file or export/download [no server]

reactjs - 使用 Material UI 导致无效的钩子(Hook)调用警告

javascript - com.facebook.react.bridge.readnativemap 无法在 React Native 中转换为 java.lang.string

javascript - 我怎样才能让我的新项目符号点显示一个字符串?

javascript - JavaScript 中的字符串到日期转换

javascript - chrome.tabs.onUpdated.addListener - 立即报告changeInfo.status == 'complete'