Как лучше всего обновить состояние в этом контексте внутри редуктора?
case DELETE_INTEREST:
let deleteInterests = state.user.interests;
let index = deleteInterests.findIndex(i => i == action.payload);
deleteInterests.splice(index, 1);
return { ...state, user: { ...state.user, interests: deleteInterests } };
ESLint не любит операторы let внутри блоков case внутри редуктора, получая:
eslint: no-case-declaration - unexpected lexical declaration in case block
Используйте {} для case DELETE_INTEREST в switch, чтобы избавиться от этой проблемы с ворсом согласно eslint.org/docs/rules/no-case-declarations





ESLint doesn't like let statements inside case blocks inside a reducer, Why?
Это не рекомендуется, потому что это приводит к тому, что переменная выходит за рамки вашего текущего case. Используя блок, вы ограничиваете область действия переменной этим блоком.
Используйте {} для создания области блока с регистром, например:
case DELETE_INTEREST: {
let .....
return (...)
}
Проверьте этот фрагмент:
function withOutBraces() {
switch(1){
case 1:
let a=10;
console.info('case 1', a);
case 2:
console.info('case 2', a)
}
}
function withBraces() {
switch(1){
case 1: {
let a=10;
console.info('case 1', a);
}
case 2: {
console.info('case 2', a)
}
}
}
console.info('========First Case ============')
withOutBraces()
console.info('========Second Case ============')
withBraces();Для удаления элемента из массива используйте array.filter, потому что сращивание внесет изменения в исходный массив. Напишите это так:
case DELETE_INTEREST:
let deleteInterests = state.user.interests;
let newData = deleteInterests.filter(i => i !== action.payload);
return { ...state, user: { ...state.user, interests: newData } };
Но почему? :)
Насколько я понял, если вы объявляете переменную внутри блока case, не ограничивая ее с помощью {}, ваша переменная будет доступна в блоке переключателя, но будет назначена только в этом блоке (есть риск, что она не будет объявлена, если она не будет не прохожу через этот случай) eslint.org/docs/rules/no-case-declarations
deleteInterestsпо-прежнему является ссылкой на массив в состоянии, поэтому вы все еще мутируете. Клонируйте список перед склейкой.