编写嵌套特定子组件的组件的惯用 React 方法是什么?我知道如何编写一个简单地包装的组件,props.children
例如 React 自己的文档中的这个示例:
function FancyBorder(props) {
return (
<div className={'FancyBorder FancyBorder-' + props.color}>
{props.children}
</div>
);
}
但是,如果我想创建一对可以像这样使用的组件怎么办:
<TabSet>
<Tab name="Mammals">
content for <b>warm blooded</b> creatures here
</Tab>
<Tab name="Fish">
content for <b>cold blooded</b> creatures here
</Tab>
</TabSet>
TabSet
这是我(使用reactstrap )的初始实现,简化以删除样式、选定选项卡管理以及与此问题无关的其他内容。
import React, {Fragment, Component} from 'react';
import { TabContent, TabPane, Nav, NavItem, NavLink } from 'reactstrap';
export default class TabSet extends Component {
render(props) {
return (
<Fragment>
<Nav tabs>
{props.children.map((tab,i) =>
<NavItem key={i}>
<NavLink>
{ tab.name }
</NavLink>
</NavItem>
)}
</Nav>
<TabContent>
{props.children.map((tab,i) =>
<TabPane key={i} tabId={i}>
{ tab.children }
</TabPane>
)}
</TabContent>
</Fragment>
);
}
}
我卡住的地方是如何实现该Tab
组件。从逻辑上讲,它是组件的一部分——TabSet
它永远不应该独立存在。它的实现应该非常简单,因为它实际上并没有做任何事情——它只是一个name
属性和子元素的容器。
所以,这里有几个问题:
- 我应该为组件创建一个单独的 JS 文件
Tab
,还是简单到我应该将它作为TabSet
组件实现的一部分导出?如果是后者,怎么做? - 在使用 的类中
TabSet
,我需要两个import
语句,还是有一种方法可以同时导入两者TabSet
并Tab
使用一个import
,有点像import React, {Fragment} from 'react'
作品?如果是后者,那么导出语句在 TabSet.js 中的外观如何?
为可能是一个显而易见的问题道歉——我是 React 和 ES6 的新手。