【问题标题】:Updating array with React hooks使用 React 钩子更新数组
【发布时间】:2020-06-01 09:36:48
【问题描述】:

我从根本上误解了 React 钩子,尤其是 useState 函数。为什么下面的代码不更新旧数组的索引,而是将trick的值设置为1?我了解如何使用 React 钩子将新项目推送到数组中,但是如何更新现有值?

const [trick, modifyTrick] = useState([null, null, null, null]);

const identityTrick = () => {
    modifyTrick(oldTrick => oldTrick) //works
}

const updatedTrick = () => {
    modifyTrick(oldTrick => oldTrick[0] = 1) //sets the entire value of trick to 1
}

【问题讨论】:

标签: reactjs react-hooks


【解决方案1】:

如果您提供modifyTrick 一个函数,则返回值将是trick 的新值。
您的函数的返回值为 1,这就是为什么 trick 设置为 1。

oldTrick[0] = 1 //this expression returns 1.

在您的 modifyTrick 函数中修改 oldTrick 数组,然后将其返回:

const updatedTrick = () => {
    modifyTrick(oldTrick => {
       oldTrick[0] = 1

       return oldTrick;
    });
};

【讨论】:

  • 为什么返回值是1?
  • @Perplexityy 赋值运算符 = 也返回一个值:您刚刚将变量设置为的值。
  • 想想表达式:'x = y = 5;'。首先执行 y = 5,并返回值 5。因为它返回值 5,所以下一个赋值 (x = 5) 是可能的。
  • 有趣,我从来不知道。谢谢!
【解决方案2】:

试试这个

  const updatedTrick = () => {
    modifyTrick(oldTrick => {
      let newTrick = [...oldTrick];
      newTrick[0] = 1;
      return newTrick;
    })
  }

【讨论】:

    【解决方案3】:

    你也可以这样做:

    const updateTrick = () => {
        modifyTrick(oldTrick => {
          oldTrick[0] = 1;
          return oldTrick;
        });
    };
    

    【讨论】:

    • 是回调参数而不是引用
    • 你在函数中弄错了 oldTrick 是一个新变量而不是状态变量
    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多