我想知道我在代码中做错了什么。我正在尝试执行以下操作:
switch (action.type) {
case TYPES.ADD_TO_FAVORITES:
if (state.faves.length <= 10) {
return assign({}, state, {
faves: state.faves.concat(action.payload),
full: false
});
} else {
return assign({}, state, {
faves: state.faves,
full: true
});
}
default:
return state;
}
Run Code Online (Sandbox Code Playgroud)
我的 linter 说要在defaultcase之前添加一个中断,但是当我这样做时,它说unreachable code.
小智 5
linter 规则,即 eslint 中的“no-fallthrough”,不允许任何情况下的意外失败。
意思是没有中断代码执行将从匹配案例继续到下一个案例,除非遇到中断、返回等。
有时我们确实需要这样做,但可能会发生无意的失败,而此规则试图防止这种情况发生。
您可以禁用规则或将其配置为警告。我建议为返回值分配一个变量,并在函数结束时返回它而不禁用规则。
function() {
var returnvalue;
Switch(variableA) {
Case 1:
returnvalue = somevalue;
break;
case 2:
returnvalue = some other value;
break;
default:
returnvalue= default value;
}
return returnvalue;
Run Code Online (Sandbox Code Playgroud)
}
对于无法访问的部分,您将从 if else 块返回。
所以中断永远不会有任何执行的机会。
Kma*_*rYC -4
switch 语句中的return没有意义,也是不允许的。您只能在函数中返回。如果你想从 switch 语句中获取值。只需将其分配给这样的变量即可
var result;
switch (action.type) {
case TYPES.ADD_TO_FAVORITES:
if (state.faves.length <= 10) {
result = assign({}, state, {
faves: state.faves.concat(action.payload),
full: false
});
} else {
result = assign({}, state, {
faves: state.faves,
full: true
});
}
break;
default:
result = state;
break;
}
Run Code Online (Sandbox Code Playgroud)