Так что я изо всех сил пытался найти лучшую практику в этом, меняя магазин, не изменяя магазин напрямую. Особенно когда оно вложено.
Я видел несколько замечательных статей по этому поводу, но я все еще не могу понять, как добиться этого идеально в моем сценарии. (https://redux.js.org/recipes/structuring-reducers/immutable-update-patterns)
В моем случае у меня есть proposals
хранилище с records
, и каждая запись (proposal
) содержит checklist
, который представляет собой массив, который выглядит следующим образом:
checklist: [
{
label: 'lease_sign',
done: false
}
],
Я хочу изменить done
на true
.
Теперь у меня есть это действие, запускаемое моим WebSocket:
case CHECK_TODO_ITEM: {
const { data } = action;
// find match record
const proposal = _.find(state.records, ['uuid', data.proposal]);
// find match check
const check = _.find(proposal.checklist, ['label', data.item]);
// change check to true
check.done = true;
// find index of propsal in the current state
const index = _.findIndex(state.records, (p) => p.uuid === data.proposal);
// re-asign state
return _.assign({}, state, {
records: _.assign({}, state.records, {
[index]: proposal,
}),
});
}
Я также пытался с:
return {
...state,
records: {
...state.records,
[index]: {
...state.records[index],
checklist,
}
}
}
};
Но это все еще мутирует состояние вне курса. Я не могу понять, каков идеальный способ сделать это.
Если бы кто-то мог мне помочь, это было бы здорово!