eslint: no-case-декларация - неожиданное лексическое объявление в блоке case - PullRequest
0 голосов
/ 08 июня 2018

Каков лучший способ обновления состояния в этом контексте внутри редуктора?

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-декларация - неожиданное лексическое объявление в блоке case

1 Ответ

0 голосов
/ 08 июня 2018

ESLint не любит операторы let внутри блоков case внутри редуктора. Почему?

Используйте {} для создания области видимости блока с case, например:

case DELETE_INTEREST: {
    let .....
    return (...)
}

Проверьте этот фрагмент:

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();

Для удаления элемента из массива используйте array.filter , поскольку splice внесет изменения в исходный массив.Напишите это так:

case DELETE_INTEREST:
    let deleteInterests = state.user.interests;
    let newData = deleteInterests.filter(i => i !== action.payload);
    return { ...state, user: { ...state.user, interests: newData } };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...