Есть стейт, в котором находится массив объектов:
const initialState = {
targetsArray: []
};
У меня есть логика удаление из стейта объекта по ключу.
Что я делаю для этого:
1) Копирую стейт
const stateCopy = { ...state };
2) Копирую стейт ещё раз что бы избавиться от передачи значения по ссылке
3) Через
arr.filter
оставляю только те эл. которые мне нужны
stateCopy.targetsArray = [...stateCopy.targetsArray];
const remindReducer = (state = initialState, action) => {
const stateCopy = { ...state };
switch (action.type) {
case REMOVE_TARGET_ITEM:
stateCopy.targetsArray = [...stateCopy.targetsArray];
console.log(stateCopy.targetsArray[0] === state.targetsArray[0]); // тут будет TRUE , ссылочные значения сохраняются,почему?
stateCopy.targetsArray = stateCopy.targetsArray.filter(
(task) => task.id !== action.payload.uId
);
return {
...stateCopy,
};
default:
return state;
}
};
Вопрос такой: правильно ли я изменяю стейт? Так как
stateCopy.targetsArray[0] === state.targetsArray[0]
- TRUE, то думаю, что нет. Что я должен сделать, чтобы изменять его иммутабельно и избавиться от ссылочной зависимости?