亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ReactJs - 如何在一個組件中使用多個子組件

ReactJs - 如何在一個組件中使用多個子組件

米琪卡哇伊 2021-12-23 15:15:58
我以我對 ReactJs 非常陌生并且可能試圖解決一些非?;镜氖虑檫@一事實作為序言。我有一段帶有自定義 HTML 的代碼:示例組件const Sample = ({ title, children }) => {    return (          <div class="panel">              <div class="title">                 {title}              </div>              <div class="body">                 {children}              </div>           </div>         );};附帶問題 - 上面的正確名稱是什么?一個片段?它看起來不是一個“組件”,而只是學習 React 的命名約定利用組件export default class ExampleComponent extends Component {    render() {        return <div class="page-body">            <div class="row">                <h1> Page 1 </h1>                <Sample title={<h1>Some title!</h1>}>                   <p>This is my sample body!</p>                </Sample>            </div>        </div>    }}您可以看到“示例”元素的內容自動作為子屬性,但要設置標題,我必須明確設置“標題”屬性。理想情況下,我想做的是類似于以下內容:使用示例組件的理想方式export default class ExampleComponent extends Component {    render() {        return <div class="page-body">            <div class="row">                <h1> Page 1 </h1>                <Sample title="Some title!">                   <Sample.Title>                       <h1>This is my new way to do a title</h1>                   </Sample.Title>                   <Sample.Body>                       <p>This is my sample body!</p>                   </Sample.Body>                </Sample>            </div>        </div>    }}我以前在其他人創建的組件上使用過這種類型的方法,但現在想自己做,發現很難得到一個簡單的例子來做到這一點。在此先感謝您的指點!
查看完整描述

3 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

我想你想要的是所謂的 JSX 命名空間?無論哪種方式,您都可以實例化 Sample,然后添加更多組件作為 Sample 的屬性(將其視為一個對象):


import React from "react"


const Sample = ({ children }) => (

  <div className="panel">

      {children}

  </div>    

)



Sample.Title = (props) => <div className="title">{props.children}</div>

Sample.Body = (props) => <div className="body">{props.children}</div>


export default Sample

注意:React 使用className而不是class因為我們使用的是 JSX。


查看完整回答
反對 回復 2021-12-23
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

該Childrenutils的套裝可以為您的情況有幫助。


import { Children } from 'react'


const Sample = ({ title, children }) => {

  let _body, _title


  Children.forEach(children, child => {

    if (child.type === SampleTitle) {

      return _title = child

    }


    if (child.type === SampleBody) {

      return _body = child

    }

  })


  if (!_title) _title = <div className='title'>{title}</div>

  if (!_body) _body = <div className='title'>{children}</div>


  return (

    <div className='panel'>

      {_title}

      {_body}

    </div>

  )

}


const SampleTitle = ({ children }) => <div className='title'>{children}</div>

const SampleBody = ({ children }) => <div className='body'>{children}</div>


Sampe.Title = SampleTitle

Sample.Body = SampleBody


現在您可以通過多種方式使用 Sample:


<Sample title="my title">

  <div>my body</div>

</Sample>


<Sample title="my title">

  <Sample.Body>my body</Sample.Body>

</Sample>


<Sample title="my fallback title">

  <Sample.Title>my overriding title</Sample.Title>

  <Sample.Body>my body</Sample.Body>

</Sample>


查看完整回答
反對 回復 2021-12-23
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

在這種情況下,您只需要將相關容器提取到它們自己的組件中:


const Sample = ({children }) => (

    <div className="panel">{children}</div>    

);


const Title = ({children}) => (

    <div className="title">{children}</div>

);


const Body = ({children}) => (

    <div className="body">{children}</div>

);


Sample.Title = Title;

Sample.Body = Body;

另請注意,css 類的正確道具是className.


查看完整回答
反對 回復 2021-12-23
  • 3 回答
  • 0 關注
  • 404 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號