我已经在状态中对一个购物清单的数组做出反应。 购物清单有多个阵列和对象,以反映每天和餐点匹配的成分。
这个函数遍历每个成分将它推送到一个空数组,我稍后将其映射并返回值。当我发现成分阵列中已经存在的成分时,它会修改该值而不是推送新的类似成分。 (原因是星期一和星期二的早餐都有成分"苹果",然后我只想在列表中显示"苹果"但是有反映两种早餐的价值量。
问题: 我修改的成分的值在州级别上更改。这意味着当我再次运行该功能时(我这样做是因为用户可以过滤天数),该值会增加。
方案 星期一和星期二的早餐都有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
答案 0 :(得分:0)
找到解决方案:
ingredients.push(data)
推动了州的引用。
我以为我通过做.slice()删除了引用,但显然不是。
通过ingredients.push(Object.create(data))
,它按预期工作。