【发布时间】:2021-01-03 17:57:29
【问题描述】:
我的目标是获取多个成分项目并将它们组合成一个项目(一个食谱)。 Example of effect
我有一个看起来像这样的总餐数数组
numberOfMeals: Array(3)
0: {name: "Meal 1", meals: Array(3)}
1: {name: "Meal 2", meals: Array(0)}
2: {name: "Meal 3", meals: Array(0)}
我通过设置selectedMealNumber状态来选择“Meal 1”。
选择后,我有一个表单组件,我在其中选择名称并将所有 3 种成分的营养信息合并为 1,方法是提交此信息:
selectedMealNumber.meals = [
{
product_name: "chicken and rice",
ingredient_uid: uuidv4(),
ingredients: selectedMealNumber.meals,
nutrients: nutrients,
},
];
只是为了说明上面的代码可以完美运行并且 numberOfMeals 数组会更新,我不完全理解如何,但它可以工作。
但我读到应该改用 setState,但是当我使用 setState 时,numberOfMeals 数组不会更新。
setSelectedMealNumber({
...selectedMealNumber,
meals: [
{
product_name: "chicken and rice",
ingredients: selectedMealNumber.meals,
},
],
});
请帮帮我,为什么 setState 在这种情况下不起作用,我应该继续使用其他方法吗?
【问题讨论】:
-
当你说一种“有效”的方式时,你到底是什么意思?就像你 console.log 一样,它是正确的数据?还是做
meals = ..似乎也以某种方式更新了你的html? (除非您在别处打另一个setState电话,否则不应该这样做 -
此外,通过以这种方式引用自己的对象,..这是设计使然吗?这样你就可以做到
setSelectedMealNumber.meals[0].indredients[0].ingredients -
是的,它确实记录了正确的数据,您可以在参考图片中看到一切都按照我的意愿呈现。
标签: javascript arrays reactjs react-router react-hooks