组合 vs 继承

包含关系

有些子组件无法提前知晓具体内容, 在 sidebar 和 dialog 等展示通用容器的组件中特别容易遇到这种情况

function FancyBorder(props) {
    return ( <
        div className = {
            'FancyBorder FancyBorder-' + props.color
        } > {
            props.children
        } <
        /div>
    );
}

这使得别的组件可以通过 JSX 嵌套,将任意组件作为子组件传递给它们。

function WelcomeDialog() {
    return ( <
        FancyBorder color = "blue" >
        <
        h1 className = "Dialog-title" >
        Welcome <
        /h1> <
        p className = "Dialog-message" >
        Thank you
        for visiting our spacecraft!
        <
        /p> <
        /FancyBorder>
    );
}

我们也可以 将所需内容传入 props. 并使用相应的 prop

function SplitPane(props) {
  return (
    <div className="SplitPane">
      <div className="SplitPane-left">
        {props.left}
      </div>
      <div className="SplitPane-right">
        {props.right}
      </div>
    </div>
  );
}

function App() {
  return (
    <SplitPane
      left={
        <Contacts />
      }
      right={
        <Chat />
      } />
  );
}

<Contacts /> 和 <Chat /> 之类的 React 元素本质就是对象(object),所以你可以把它们当作 props,像其他数据一样传递。

最后更新于

这有帮助吗?