更新对象数组中的单个对象键值反应 redux 状态
updating a single object key value inside array of objects react redux state
我正在尝试使用 react redux 更新一个对象及其在数组中的键值,但由于我是 react 和 redux 的新手,所以我没有找到执行此操作的好方法以及值,不是更新到。
这是我的动作
export const addIngredientToMenuItemCartA = (menu_item_id,timestamp,ingrediant,ingrediant_type,selectedMenuItemIngrediantType)
=> async dispatch => {
dispatch({
type: ADD_INGREDIENT_TO_MENU_ITEM_CART,
payload: {
menu_item_id,
timestamp,
ingrediant,
ingrediant_type,
ingrediant_category_type_blue: selectedMenuItemIngrediantType
}
});
};
这是我的减速器
export default function(state=[],action){
case ADD_INGREDIENT_TO_MENU_ITEM_CART:
let menu_item_id = action.payload.menu_item_id;
let ingrediant = action.payload.ingrediant;
let timestamp = action.payload.timestamp;
let items1 = state.slice();
const itemIndexi1 = items1.findIndex(item => item.menu_item_id === menu_item_id);
if(true){
items1[itemIndexi1].ingrediantTotal = ingrediant.price;
}
items1[itemIndexi1].ingrediants.push(ingrediant);
return items1;
default:
return state;
}
我有一个购物车数组,里面有对象,我想找到特定的对象然后更新它们,但是如果我在 reducer 中更新它们,那么商店中的值就不会改变。
看来你正在改变对象。有一个简单的模式可以遍历列表并仅处理相关项目,同时创建没有突变的新对象。
在您的情况下,您的代码可能如下所示:
case ADD_INGREDIENT_TO_MENU_ITEM_CART: {
const { menu_item_id, ingrediant } = action.payload;
const nextState = state.map(item => {
if (item.menu_item_id !== menu_item_id) {
// not our item, return it as is
return item;
}
// this is our relevant item, return a new copy of it with modified fields
return {
...item,
ingrediantTotal: ingrediant.price,
ingrediants: [
...item.ingrediants,
ingrediant
]
}
});
return nextState;
}
请记住,Objects
和 Arrays
是可变的,因此我们可以使用 spread syntax(...
)或 .slice
等
我正在尝试使用 react redux 更新一个对象及其在数组中的键值,但由于我是 react 和 redux 的新手,所以我没有找到执行此操作的好方法以及值,不是更新到。
这是我的动作
export const addIngredientToMenuItemCartA = (menu_item_id,timestamp,ingrediant,ingrediant_type,selectedMenuItemIngrediantType)
=> async dispatch => {
dispatch({
type: ADD_INGREDIENT_TO_MENU_ITEM_CART,
payload: {
menu_item_id,
timestamp,
ingrediant,
ingrediant_type,
ingrediant_category_type_blue: selectedMenuItemIngrediantType
}
});
};
这是我的减速器
export default function(state=[],action){
case ADD_INGREDIENT_TO_MENU_ITEM_CART:
let menu_item_id = action.payload.menu_item_id;
let ingrediant = action.payload.ingrediant;
let timestamp = action.payload.timestamp;
let items1 = state.slice();
const itemIndexi1 = items1.findIndex(item => item.menu_item_id === menu_item_id);
if(true){
items1[itemIndexi1].ingrediantTotal = ingrediant.price;
}
items1[itemIndexi1].ingrediants.push(ingrediant);
return items1;
default:
return state;
}
我有一个购物车数组,里面有对象,我想找到特定的对象然后更新它们,但是如果我在 reducer 中更新它们,那么商店中的值就不会改变。
看来你正在改变对象。有一个简单的模式可以遍历列表并仅处理相关项目,同时创建没有突变的新对象。
在您的情况下,您的代码可能如下所示:
case ADD_INGREDIENT_TO_MENU_ITEM_CART: {
const { menu_item_id, ingrediant } = action.payload;
const nextState = state.map(item => {
if (item.menu_item_id !== menu_item_id) {
// not our item, return it as is
return item;
}
// this is our relevant item, return a new copy of it with modified fields
return {
...item,
ingrediantTotal: ingrediant.price,
ingrediants: [
...item.ingrediants,
ingrediant
]
}
});
return nextState;
}
请记住,Objects
和 Arrays
是可变的,因此我们可以使用 spread syntax(...
)或 .slice
等