下面的代码eslint引发了一些错误

{authModal.mode === 'login' ? <Login /> : authModal.mode === 'register' ? <SignUp /> : <ForgotPassword />}

错误:不要嵌套三元表达式.Eslint(非嵌套三进制)

我想出了三种不会出错的方法:

  1. 判断每个 case
{authModal.mode === 'login' && <Login />}
{authModal.mode === 'register' && <SignUp />}
{authModal.mode === 'forgotPassword' && <ForgotPassword />}
  1. IF/ELSE内部函数
{(() => {
  if (authModal.mode === 'login') {
    return <Login />;
  }
  if (authModal.mode === 'register') {
    return <SignUp />;
  }
  return <ForgotPassword />;
})()}
  1. 功能内部的switch 盒
{(() => {
  switch (authModal.mode) {
    case 'login':
      return <Login />;
    case 'register':
      return <SignUp />;
    case 'forgotPassword':
      return <ForgotPassword />;
    default:
      throw new Error('Invalid auth mode');
  }
})()}

我是JS的新手,我想知道人们会如何处理这件事.如果我的一些解决方案需要避免,请让我知道.其他解决方案也很受欢迎!

编辑:

我已经接受了在3个组件在性能方面都很重的情况下工作得最好的答案.即最佳性能.

推荐答案

我会使用useMemo进行对象查找:

José's answer相比,使用useMemo可确保只有在authModal.mode发生更改时才刷新,从而提供更好的性能.

const authComponent = useMemo(() => ({
  'login': <Login />,
  'register': <SignUp />,
  'forgotPassword': <ForgotPassword />
})[authModal.mode], [authModal.mode]);

return (
  <>
    {authComponent}
  </>
)

但是,如果您希望获得更好的性能,将useMemo与您的switch解决方案相结合可能是更好的 Select ,因为它不会在内存中同时创建所有三个元素,而实际上只呈现一个元素.优化可能很小,但如果您有很多元素或这些元素很难初始化,则优化会更重要:

const authComponent = useMemo(() => {
  switch (authModal.mode) {
    case 'login':
      return <Login />;
    case 'register':
      return <SignUp />;
    case 'forgotPassword':
      return <ForgotPassword />;
    default:
      throw new Error('Invalid auth mode');
  }
}, [authModal.mode]);

return (
  <>
    {authComponent}
  </>
)

Javascript相关问答推荐

输入有关HTML复选框的已判断属性的信息

React状态变量在使用++前置更新时引发错误

在JavaScript中,如何将请求的回调函数的结果合并到运行的代码中?

容器如何更改默认插槽中子项的显示?

有什么(最佳)方法可以从模块中获取脚本模块的多姆元素吗?

使用JavaScript在ionic Web应用程序中更新.pane和.view的背景 colored颜色

togglePopover()不打开但不关闭原生HTML popover'

如何在Obsidian dataview中创建进度条

rxjs插入延迟数据

使用getBorbingClientRect()更改绝对元素位置

扩展类型的联合被解析为基类型

VSCode中出现随机行

当我在Reaction中创建一个输入列表时,我的输入行为异常

如何限制显示在分页中的可见页面的数量

如何利用CSS中的隐藏元素实现平滑扩展和防止网格行间隙

当代码另有说明时,随机放置的圆圈有时会从画布上消失

在Odoo中如何以编程方式在POS中添加产品

将Singleton实例设置为未定义后的Angular 变量引用持久性行为

在Java脚本中构建接口的对象

为什么这个最小Angular 的Licial.dev设置不起作用?