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

JSX中如何返回多个元素?未登录时渲染导航项遇阻

嘿,这个问题我之前踩过坑!React里确实没法直接返回多个相邻的JSX元素,不过现在有好几种靠谱的解决方式,我给你拆解一下:

1. 使用React Fragment(最推荐的方案)

这是React官方推荐的方式,既能返回多个元素,又不会在DOM里多生成额外的容器节点。你可以用完整的<React.Fragment>标签,或者更简洁的短语法<> </>。

先改你的函数写法:

myFunction(){
  return(
    <>
      <NavItem onClick={this.login}>Log in</NavItem>
      <NavItem onClick={this.register}>Register</NavItem>
    </>
  )
}

或者用完整标签(适合需要加key的场景,比如循环里):

myFunction(){
  return(
    <React.Fragment>
      <NavItem onClick={this.login}>Log in</NavItem>
      <NavItem onClick={this.register}>Register</NavItem>
    </React.Fragment>
  )
}

回到你最开始的导航渲染代码,直接用Fragment包裹else分支的两个元素就行:

<Nav>
  {this.state.user ? (
    <NavItem onClick={this.logout}>Log out</NavItem>
  ) : (
    <>
      <NavItem onClick={this.login}>Log in</NavItem>
      <NavItem onClick={this.register}>Register</NavItem>
    </>
  )}
</Nav>

2. 用容器元素包裹(不推荐,仅兼容旧版本)

如果你的React版本比较老(低于v16.2),还不支持Fragment,可以用一个div或者其他语义化容器把多个元素包起来,但这样会在DOM里多一层不必要的节点,可能影响样式和性能:

myFunction(){
  return(
    <div>
      <NavItem onClick={this.login}>Log in</NavItem>
      <NavItem onClick={this.register}>Register</NavItem>
    </div>
  )
}

3. 返回元素数组(早期方案)

在React v16之后,还可以直接返回一个元素数组,不过每个元素必须加上唯一的key属性:

myFunction(){
  return[
    <NavItem key="login" onClick={this.login}>Log in</NavItem>,
    <NavItem key="register" onClick={this.register}>Register</NavItem>
  ]
}

这种方式不用额外容器,但需要手动加key,写起来有点麻烦,所以还是Fragment更顺手。

总结一下,现在优先用Fragment的短语法,简洁又实用,完美解决你要返回多个NavItem的问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:34:11