Eslint: 在 case 块中无 case 声明-意外的词法声明

什么是更好的方法来更新状态在这个上下文内的减速器?

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 不喜欢在 reducer 中的 case 块中使用 let 语句,因此获得:

Eslint: 无 case 声明-意外的词法声明,以防万一 拦截

79883 次浏览

ESLint 不喜欢在 减速器,为什么?

不建议这样做,因为这会导致变量处于当前 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,因为 拼接将对原始数组进行更改。这样写:

case DELETE_INTEREST:
let deleteInterests = state.user.interests;
let newData = deleteInterests.filter(i => i !== action.payload);
return { ...state, user: { ...state.user, interests: newData } };

尝试用{}封装案例内部 就像这个简单的例子

      case EnumCartAction.DELETE_ITEM: {
const filterItems = state.cart.filter((item) => item._id !== action.payload)
return {
...state,
cart: filterItems
}
}

一个简单的修复方法是使用括号 {}来封装您的 case 代码。 如果您使用的是 return,那么在某些情况下可能需要添加 break