Wrapper Components

对我们的组件进行包装来适配不同的样式/交互行为.
如果你想处理<div>或者其他HTML标签的话, 你可以使用组合.

当你创建React实例的时候, 你能在jsx标签内包裹其他的React组件或者任意的JavaScript表达式.
父组件通过this.props.children能访问到其包裹的子组件.

  1. const SampleComponent = () => {
  2. <Parent>
  3. <Child />
  4. </Parent>
  5. };
  6. const Parent = () => {
  7. // 你能使用class 'bla'或者其他的class来给子组件加上不同的样式.
  8. <div className="bla">
  9. {this.props.children}
  10. </div>
  11. };

值得一提的是, 包裹组件同样可以通过接收一个tag名来生成对应的HTML标签.
但是一般情况下我们不推荐这么做, 因为这样做的话你就不能添加属性或者传入props了.

  1. const SampleComponent = () => {
  2. <Wrap tagName="div" content="Hello World" />
  3. };
  4. const Wrap = ({ tagName, content }) => {
  5. const Tag = `${tagName}` // 变量名必须大写开头因为这是一个组件.
  6. return <Tag>{content}</Tag>
  7. }

参考资料: