React组件结束标记

时间:2018-02-26 14:53:02

标签: javascript reactjs components

我是React的新手,我试图找出< MyComponent>< / MyComponent>的目的/用途vs< MyComponent />。我似乎无法找到除自动关闭标签之外的任何信息。

我使用自动关闭< MyComponent />创建了一个基本的标签滚动条作为JSFiddle。以及随后的道具,我想知道在React中写一个比我做的更好的方式。

class TabScroller extends React.Component {

  render() {
    return (
      <div className="tabScroller">
        <div className="NavList">
          <TabNav handleClick={this.handleNavClick} />
          <TabList 
            tabs={this.state.tabs} 
            activeTab={this.state.activeTab}
            scrollPosition={this.state.scrollPosition} 
            handleClick={this.handleTabClick}
          />
        </div>
        <TabContent content={this.state.tabs[this.state.activeTab].content} />
      </div>
    );
  }
}

// ========================================

ReactDOM.render(
  <TabScroller />,
  document.getElementById('root')
);

2 个答案:

答案 0 :(得分:16)

在React的JSX中,只需在组件具有子组件时编写ListNode,如下所示:

<MyComponent></MyComponent>

如果<MyComponent> <Child /> <Child /> <Child /> </MyComponent> <MyComponent>之间没有任何内容,那么您可以将其写为</MyComponent><MyComponent/>(但通常首选<MyComponent></MyComponent>)。详情请见Introducing JSX

作为附注,您可以通过特殊的<MyComponent/>属性访问组件中的子项。更多信息JSX in Depth: Children in JSX

请注意,这非常像HTML或XHTML一样。它有自己的(类似的)不同规则的东西。例如,在HTML中,props.children<div/>完全相同: start 标记,您最终必须拥有结束标记。不是这样的JSX(或XHTML)。 HTML的规则是 void elements (从不具有标记内容的元素,例如<div>br)可以在img之前使用/进行编写{1}}并且它们永远不会得到结束标记,但非空元​​素(如>)必须始终具有结束标记(div),它们不能自动关闭。在JSX(和XHTML)中,它们可以是。

答案 1 :(得分:4)

自动关闭标签的目的只是它更紧凑的事实。当所述组件没有任何通常包裹父母的孩子时,这尤其有用。

通常对于叶组件(即没有任何子组件的组件),使用自关闭语法。喜欢:<Component />。即使它有道具,你也可以:<Component foo="bar" />

但是,请记住children是道具,所以可以在技术上做:

<Component children={<span>foo</span>} />

但我发现它不太可读并且反对它(请参阅下面的免责声明)。

总结一下,这些是等价的:

  • <Component /> = <Component></Component>
  • <Component foo="bar" /> = <Component foo="bar"></Component>
  • <Component children={<span>foo</span>}></Component> =

    <Component><span>foo</span></Component>

您可以使用您喜欢的任何方法。虽然实践是在没有孩子时使用短手版本。

免责声明: 虽然通过其对象键值定义childen prop在技术上会起作用,但这样做强烈建议不要,因为它破坏API,因为它意味着使用。只有在对自己所做的事情充满信心时才使用此版本。