【问题标题】:Do you need to use a default in switch statement JS [duplicate]您是否需要在switch语句JS中使用默认值[重复]
【发布时间】:2019-10-11 07:52:30
【问题描述】:

这是一个直截了当的问题,但在 switch 语句中可以不返回 default 状态吗?

switch 语句位于 React 组件中,如下所示。

const App = (chosenTeam) => {
    const renderSection = (team) => {
        switch (team) {
          case 'LFC':
            return <Liverpool />;
          case 'MUFC':
            return <TerribleTeam />;
          case 'Chelsea':
            return <Blues />;
        }
    }

    return {renderSection(chosenTeam)}
}

【问题讨论】:

  • 没关系。没有,你会得到 undefined 作为函数的结果,如果这是你想要的值。

标签: javascript reactjs ecmascript-6


【解决方案1】:

不,这是可选的,请参阅switch on MDN

default 可选

默认子句;如果提供,则如果表达式的值与任何 case 子句都不匹配,则执行此子句。

无论如何,你应该使用字典对象而不是 switch:

const team = {
  LFC: <Liverpool />,
  MUFC: <TerribleTeam />,
  Chelsea: <Blues />
};

const App = chosenTeam => <>{team[chosenTeam]}</>;

主要方面是您获得了an object.的所有功能


注意,在组件主体内渲染组件可能会导致性能权衡(除非它们记忆):

const App = chosenTeam => {
  //         v Executed on *every* render
  const renderSection = team => { ... };

  return <>...</>;
};
//        v Should be in the outer scope if you keeping the function
const renderSection = team => {
  switch (team) { ... }
};

const App = chosenTeam => {
  return <>...</>;
};

【讨论】:

  • 感谢@Dennis!你为什么会说字典而不是开关?就因为它更整洁?
  • @peterflanagan 我会尝试添加关于对象的解释
  • 关键是你得到了对象的所有功能,比如Object.entries,所以你可以映射它等等。
【解决方案2】:

如果您知道切换的值将​​处于上述情况之一,那么不,默认情况是不必要的,因为它永远不会达到。

switch 在许多情况下可能容易出错并且不必要地冗长。您可以考虑使用按团队名称索引的对象:

const teams = {
  LFC: () => (<Liverpool />),
  MUFC: () => (<TerribleTeam />),
  Chelsea: () => (<Blues />)
}
const App = (chosenTeam) => {
  return {teams[chosenTeam]()}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2021-11-04
    相关资源
    最近更新 更多