JS switch 语句是否需要使用默认值

pet*_*gan 3 javascript ecmascript-6 reactjs

这是一个直截了当的问题,但在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)}
}
Run Code Online (Sandbox Code Playgroud)

Den*_*ash 5

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

default 选修的

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

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

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

const App = chosenTeam => <>{team[chosenTeam]}</>;
Run Code Online (Sandbox Code Playgroud)

主要方面是您可以获得对象的所有功能。


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

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

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

const App = chosenTeam => {
  return <>...</>;
};
Run Code Online (Sandbox Code Playgroud)