zoukankan      html  css  js  c++  java
  • 10、ReactJs基础知识10--组件组合 vs 继承

    1、 组件使用一个特殊的 children prop 来将他们的子组件传递到自己的渲染结果中:
           这使得别的组件可以通过 JSX 嵌套,将任意组件作为子组件传递给它们
          function FancyBorder(props) {
            return (
              <div className={'FancyBorder FancyBorder-' + props.color}>
                {props.children}
              </div>
            );
          }
    
          function WelcomeDialog() {
            return (
              <FancyBorder color="blue">
                <h1 className="Dialog-title">
                  Welcome
                </h1>
                <p className="Dialog-message">
                  Thank you for visiting our spacecraft!
                </p>
              </FancyBorder>
            );
          }
    你可能需要在一个组件中预留出几个“洞”。
    这种情况下,我们可以不使用 children,而是自行约定:将所需内容传入 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 Contacts(props){
            return <h1>联系人</h1>;
          }
          function Chat(props){
            return <h1>聊天室</h1>;
          }
    
          function App() {
            return (
              <SplitPane
                left={
                  <Contacts />
                }
                right={
                  <Chat />
                } />
            );
          }
     <Contacts /> 和 <Chat /> 之类的 React 元素本质就是对象(object),
     所以你可以把它们当作 props,像其他数据一样传递。这种方法可能使你想起别的库中“槽”(slot)的概念,
     但在 React 中没有“槽”这一概念的限制,你可以将任何东西作为 props 进行传递
     此处相当于vue中的具名插槽
     
    2、特例关系
        有些时候,我们会把一些组件看作是其他组件的特殊实例,比如 WelcomeDialog 可以说是 Dialog 的特殊实例。
        在 React 中,我们也可以通过组合来实现这一点。“特殊”组件可以通过 props 定制并渲染“一般”组件:
        相当于给函数传递实参返回结果一样
    function Dialog(props) {
            return (
              <FancyBorder color="blue">
                <h1 className="Dialog-title">
                  {props.title}
                </h1>
                <p className="Dialog-message">
                  {props.message}
                </p>
              </FancyBorder>
            );
          }
    
          function WelcomeDialog() {
            return (
              <Dialog
                title="Welcome"
                message="Thank you for visiting our spacecraft!" />
    
            );
          }
    3、组合也同样适用于以 class 形式定义的组件。
    Props 和组合为你提供了清晰而安全地定制组件外观和行为的灵活方式。
     注意:组件可以接受任意 props,包括基本数据类型,React 元素以及函数。
  • 相关阅读:
    鬼斧神工:求n维球的体积
    一个双曲函数的积分
    复杂的对数积分(八)
    一个有意思的对数积分的一般形式
    Logarithmic-Trigonometric积分系列(二)
    Logarithmic-Trigonometric积分系列(一)
    Some series and integrals involving the Riemann zeta function binomial coefficients and the harmonic numbers
    Euler Sums系列(六)
    Euler Sums系列(五)
    级数欣赏
  • 原文地址:https://www.cnblogs.com/gopark/p/12292919.html
Copyright © 2011-2022 走看看