React useReducer - 更新对象数组
React useReducer - update array of objects
我想使用 React.useReducer 来更新状态。我的状态是一组对象。触发更新操作时,不仅更新所需索引中的值,而且更新所有这些值。我只想更新指定数组索引中的值。我该怎么做?
点击button1后,我想得到
[{"amount":null,"kcal":null,"name":null,"isPieceType":false},
{"amount":null,"kcal":null,"name":null,"isPieceType":false},
{"amount":null,"kcal":125,"name":null,"isPieceType":false},
{"amount":null,"kcal":null,"name":null,"isPieceType":false}]
而不是
[{"amount":null,"kcal":125,"name":null,"isPieceType":false},
{"amount":null,"kcal":125,"name":null,"isPieceType":false},
{"amount":null,"kcal":125,"name":null,"isPieceType":false},
{"amount":null,"kcal":125,"name":null,"isPieceType":false}]
我尝试将状态复制为 const newState = [...state]
并使用 lodash 的 cloneDeep
。下面,link 使用 jsfiddle 代码进行重现。
您 ingredientsState
的初始状态引用了名为 initialIngredient
的同一个对象。当更新一个条目时,这会导致所有内容都更新。虽然
const stateToUpdate = [...state];
再次创建了一个新数组,所有条目都引用同一个对象。
修复
更改以下引用的数组条目
const [ingredientsState, ingredientsDispatch] = React.useReducer(mealReducer, [
initialIngredient,
initialIngredient,
initialIngredient,
initialIngredient
]);
成为 initialIngredient
对象副本的数组(spread operator 只需创建引用对象的克隆)
const [ingredientsState, ingredientsDispatch] = React.useReducer(mealReducer, [
{ ...initialIngredient },
{ ...initialIngredient },
{ ...initialIngredient },
{ ...initialIngredient }
]);
我想使用 React.useReducer 来更新状态。我的状态是一组对象。触发更新操作时,不仅更新所需索引中的值,而且更新所有这些值。我只想更新指定数组索引中的值。我该怎么做?
点击button1后,我想得到
[{"amount":null,"kcal":null,"name":null,"isPieceType":false},
{"amount":null,"kcal":null,"name":null,"isPieceType":false},
{"amount":null,"kcal":125,"name":null,"isPieceType":false},
{"amount":null,"kcal":null,"name":null,"isPieceType":false}]
而不是
[{"amount":null,"kcal":125,"name":null,"isPieceType":false},
{"amount":null,"kcal":125,"name":null,"isPieceType":false},
{"amount":null,"kcal":125,"name":null,"isPieceType":false},
{"amount":null,"kcal":125,"name":null,"isPieceType":false}]
我尝试将状态复制为 const newState = [...state]
并使用 lodash 的 cloneDeep
。下面,link 使用 jsfiddle 代码进行重现。
您 ingredientsState
的初始状态引用了名为 initialIngredient
的同一个对象。当更新一个条目时,这会导致所有内容都更新。虽然
const stateToUpdate = [...state];
再次创建了一个新数组,所有条目都引用同一个对象。
修复
更改以下引用的数组条目
const [ingredientsState, ingredientsDispatch] = React.useReducer(mealReducer, [
initialIngredient,
initialIngredient,
initialIngredient,
initialIngredient
]);
成为 initialIngredient
对象副本的数组(spread operator 只需创建引用对象的克隆)
const [ingredientsState, ingredientsDispatch] = React.useReducer(mealReducer, [
{ ...initialIngredient },
{ ...initialIngredient },
{ ...initialIngredient },
{ ...initialIngredient }
]);