javascript - 使用 React hooks 不可变地更新对象数组中的属性

标签 javascript reactjs object react-hooks

我正在尝试使用react hooks更新对象数组中的数组属性,众所周知,当我们需要根据先前的状态更新状态时,我们使用函数集“MypopertyName” 如下图:

我的代码:

  const [MenuList, setMenuList] = useState([
    {
      id: 0,
      title: "sushi",
      desc: "finest fish and vegies",
      price: "$22.99",
      amount: 1,
    },
    {
      id: 1,
      title: "shneitzel",
      desc: "a german specialty",
      price: "$50.99",
      amount: 1,
    },
    {
      id: 2,
      title: "pizza",
      desc: "an italian specialty",
      price: "$100.99",
      amount: 1,
    },
    {
      id: 3,
      title: "pasta",
      desc: "an italian specialty",
      price: "$200.99",
      amount: 1,
    },
  ]);

我的问题是我想根据用户的点击来更改膳食量,所以这是我尝试过的:

  const onClickHandler = (id) => {
    for (const key in MenuList) {
      if (MenuList.id === id) {
        return (MenuList[key].amount = MenuList[key].amount + 1);
      }
    }
  };

我知道react的 react 性系统仅在我调用setMenuList()时才起作用我尝试过,但除了我想永久更新特定对象之外它不起作用,所以我需要使用该函数语法如下:

setMenuList((prevMenuList)=>{
  //my code
})

另外,我没能让它工作,抱歉,我是长期使用基于类的组件的老专家之一,你知道 state={} 所以整个新的 hooks 概念对我来说是新的。

因此,我们将不胜感激并提前感谢您的任何帮助。

最佳答案

基于函数的setter的使用

setMenuList((prevMenuList)=>{
当当前在其范围内的 menuList 不是当前正在呈现的内容时,可以调用该函数时,

非常有用 - 例如,在 API 调用完成后调用该函数时。这与 React 需要不改变状态完全不同,后者完全需要另一种方法。

映射状态数组,当ID匹配时,返回一个数量递增的新对象。

const onClickHandler = (id) => {
  setMenuList(
    menuList.map(
      obj => obj.id !== id ? obj : ({
        ...obj,
        amount: obj.amount + 1
      })
    )
  );
};

关于javascript - 使用 React hooks 不可变地更新对象数组中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68523981/

相关文章:

javascript - 如何在 ReactJs 中组合样式属性

Javascript 对象从自身调用函数

javascript - 对象构造函数和 TypeError 中的递归函数

javascript - Jquery/Javascript 正则表达式 : filter, 允许输入多个标签来选择该类别,jsfiddle

javascript - 未捕获的语法错误 : missing ) after argument list jQuery

javascript - = +_ 在 JavaScript 中是什么意思

javascript - Firebase 云函数使用 fetch() 反复循环

javascript - 在 React 中使用一个模块构建一个小型网站 VS 在 Html/css/js 中

javascript - 如何计算现在日期和恒定日期之间的差异。并像 1d,1m,1w 一样编辑它

python - 如何将一个类的功能分离到多个文件中?