Мне нужно изменить свое состояние, и я не уверен, как это сделать правильно.
Свойство моего аккаунта в моем состоянии выглядит примерно так:
{
"account":{
"id":7,
"categories":[
{
"id":7,
"products":[
{
"productId":54
}
]
},
{
"id":9,
"products":[
{
"productId":89
}
]
}
]
}
}
Мое действие отправляет следующее:
dispatch({
type: Constants.MOVE_PRODUCT,
productId: 54,
sourceCategoryId: 7,
targetCategoryId: 9
});
Теперь мой каркас редуктора:
const initialState = {
account: null,
};
const accounts = (state = initialState, action) => {
switch (action.type) {
case Constants.MOVE_PRODUCT:
/*
action.productId
action.sourceCategoryId
action.targetCategoryId
*/
const sourceCategoryIndex = state.account.categories.findIndex((category) => { return category.id === action.sourceCategoryId; });
const sourceCategory = state.account.categories[sourceCategoryIndex];
const targetCategoryIndex = state.account.categories.findIndex((category) => { return category.id === action.targetCategoryId; });
const targetCategory = state.account.categories[targetCategoryIndex];
// ??
return {...state};
}
}
export default accounts;
Я запутался, если я обновляю состояние непосредственно внутри блока коммутатора, это неправильно?
Это должно быть однострочное обновление, которое выполняет мутацию на месте, или пока я делаю это в блоке переключателей, все в порядке?
Обновление
Из действия мне нужно удалить productId из sourceCategoryId и добавить его в targetCategoryId внутри объекта состояния учетной записи.