返回React.render()中的多个元素

ary*_*yan 32 reactjs

我是新的反应,我遇到了这个问题:

render: function(){
    return (
        <h3>Account</h3>
        <a href="#" onClick={some_event}>Login</a>
        <a href="#" onClick={some_event}>Logout</a>
)}
Run Code Online (Sandbox Code Playgroud)

当我这样渲染时,它给出了错误的说法 multiple components must wrapt with end

我应该为每个html标签或每一行创建一个组件,或者我可以以这种方式呈现..

有什么建议吗?

Bre*_*ody 61

render方法只能呈现单个根节点(更新:这在v16中已更改,请参见下文).在你的情况下,你返回3个节点.要解决此问题,您可以将3个节点包装在单个根节点中:

render: function(){
  return (
    <div>
      <h3>Account</h3>
      <a href="#" onClick={some_event}>Login</a>
      <a href="#" onClick={some_event}>Logout</a>
    </div>
)}
Run Code Online (Sandbox Code Playgroud)

更新在React v16中,现在可以render()返回一个元素数组.这被称为片段.

render() {
  return [
    <ChildA key="key1" />,
    <ChildB key="key2" />,
    <ChildC key="key3" />,
  ];
}
Run Code Online (Sandbox Code Playgroud)

还有一个<>用于声明片段的短语法():

render() {
  return (
    <React.Fragment>
      <ChildA />
      <ChildB />
      <ChildC />
    </React.Fragment>
  );
}
Run Code Online (Sandbox Code Playgroud)

  • 有时,样式需要考虑这一点,例如,包装div会在flexbox布局中产生问题.我记得看过一些关于将React元素作为数组输出的东西.环顾四周,这可能是一个更慷慨的答案:/sf/ask/1668869821/ (5认同)

lul*_*ala 19

返回以逗号分隔的元素数组.

render: function(){
  return ([
    <h3>Account</h3>,
    <a href="#" onClick={some_event}>Login</a>,
    <a href="#" onClick={some_event}>Logout</a>
  ])
}
Run Code Online (Sandbox Code Playgroud)

  • 就个人而言,我发现这种方式更有用,因为它减少了容器 - 它(不断增加的不必要的容器数量)和更清洁的CSS样式.谢谢@lulalala (3认同)
  • 请记住,您需要在返回元素数组时提供唯一的键支柱.https://facebook.github.io/react/docs/lists-and-keys.html (2认同)

Sis*_*hus 5

您可以对React 16.2+中的片段使用以下语法:

render() {
  return (
    <>
      <ChildA />
      <ChildB />
      <ChildC />
    </>
  );
}
Run Code Online (Sandbox Code Playgroud)