¿Cuál es la mejor manera de actualizar el estado en este contexto dentro de un reductor?
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 } };A ESLint no le gustan las declaraciones let dentro de bloques de casos dentro de un reductor, obteniendo:
eslint: no-case-declaration - declaración léxica inesperada en el bloque de casos
A ESLint no le gustan las declaraciones let dentro de bloques de casos dentro de un reductor, ¿por qué?
Esto no se recomienda porque da como resultado que la variable esté fuera del alcance de su case actual. Al usar un bloque, limita el alcance de la variable a ese bloque.
Use {} para crear el alcance del bloque con el caso, así:
case DELETE_INTEREST: { let ..... return (...) }Revisa este fragmento:
function withOutBraces() { switch(1){ case 1: let a=10; console.log('case 1', a); case 2: console.log('case 2', a) } } function withBraces() { switch(1){ case 1: { let a=10; console.log('case 1', a); } case 2: { console.log('case 2', a) } } } console.log('========First Case ============') withOutBraces() console.log('========Second Case ============') withBraces();Para eliminar el elemento de la matriz, use array.filter , porque el empalme hará los cambios en la matriz original. Escríbelo así:
case DELETE_INTEREST: let deleteInterests = state.user.interests; let newData = deleteInterests.filter(i => i !== action.payload); return { ...state, user: { ...state.user, interests: newData } };intente encapsular el interior de la caja con {} como este, vea un ejemplo simple
case EnumCartAction.DELETE_ITEM: { const filterItems = state.cart.filter((item) => item._id !== action.payload) return { ...state, cart: filterItems } }