改变函数中的局部值,修改反应中的全局状态

时间:2017-05-03 11:22:26

标签: javascript arrays loops reactjs if-statement

我已经在状态中对一个购物清单的数组做出反应。 购物清单有多个阵列和对象,以反映每天和餐点匹配的成分。

这个函数遍历每个成分将它推送到一个空数组,我稍后将其映射并返回值。当我发现成分阵列中已经存在的成分时,它会修改该值而不是推送新的类似成分。 (原因是星期一和星期二的早餐都有成分"苹果",然后我只想在列表中显示"苹果"但是有反映两种早餐的价值量。

问题: 我修改的成分的值在州级别上更改。这意味着当我再次运行该功能时(我这样做是因为用户可以过滤天数),该值会增加。

方案 星期一和星期二的早餐都有Apple的成分。 Apple的价值为2,因为配方需要两个苹果。这意味着我的循环应该返回4个苹果。这是第一次。但是当我更改som过滤器以便循环再次运行以反映新过滤器时,它现在显示6个苹果。

有人能告诉我这是怎么回事吗?这段代码如何修改我的全局状态?

loopIngredients (items) {
    const ingredients = []
    const newArr = items.slice()

    newArr.map((data, key) => {
      data.map((data, index) => {
        const valid = ingredients.find((item) => item.ingredient.id === data.ingredient.id)
        if (valid) {
          const parentValue = parseInt(ingredients[index].value)
          const localValue = parseInt(data.value)
          ingredients[index].value = (parentValue + localValue).toString()
        } else {
          ingredients.push(data)
        }
      })
   })
} // END loopIngredients

1 个答案:

答案 0 :(得分:0)

找到解决方案: ingredients.push(data)推动了州的引用。 我以为我通过做.slice()删除了引用,但显然不是。

通过ingredients.push(Object.create(data)),它按预期工作。