当我在我的 switch 语句中使用中断时无法访问的代码错误

use*_*863 4 javascript redux

我想知道我在代码中做错了什么。我正在尝试执行以下操作:

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)