3 回答

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。

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>

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.
添加回答
舉報