You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在map遍历中无需临时变量直接渲染JS对象存储的React组件?

正确实现方案

你想要省略临时变量的需求有两种合法实现方式,需要注意不能直接把组件当成普通函数调用,直接调用sections[section.type](props)会绕过React的组件调度逻辑,违反hooks规则,在使用dynamic导入的场景下还会导致加载状态异常。

方案1:使用React.createElement(最贴近你想要的函数调用写法)

React.createElement是JSX语法的底层实现,完全符合你期望的调用形式:

export default function Page({ page }) { 
  return (
    <main>
      {page.sections.map((section, index) => 
        React.createElement(
          sections[section.type] || null,
          {
            key: `${pageKey}-${index}`,
            id: index,
            fields: section.fields
          }
        )
      )}
    </main>
  );
}

方案2:用括号包裹动态组件直接写JSX

如果更习惯JSX写法,只需要用括号把动态取到的组件表达式包裹起来即可,JSX会自动识别括号内的结果为自定义组件,不会当成原生DOM标签处理:

export default function Page({ page }) { 
  return (
    <main>
      {page.sections.map((section, index) => (
        <(sections[section.type] || null)
          key={`${pageKey}-${index}`}
          id={index}
          fields={section.fields}
        />
      ))}
    </main>
  );
}

注意事项

两种写法的效果和你原来的写法完全等价,性能、生命周期行为没有任何区别,可以根据团队编码习惯选择。

内容的提问来源于stack exchange,提问作者Darkbound

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:18:04