增強你的 React component 的組合
在 Facebook 上,我們使用上千個 React 的 component, 我們找不到任何推薦你使用 component 建立繼承的情況。
Long live to composition, inheritance is dead.
所以,你如何在 React 繼承一個 component?
好吧,相當明顯的,@Facebook 的人認為從父 component 繼承是不恰當的,讓我們看看其他方法:
提前規劃
在某些情況,你有一個 component 但是不知道它會不會有 children(大多數人都是這樣)。關於這點,React 給了我們 props.children
:
function List(props) {
return (
<ul className={'List List-' + props.importance}>
{props.children}
</ul>
);
}
function DownloadMenu() {
return (
<List importance="High">
<li>Download SBCL</li>
<li>Download Racket</li>
<li>Download Haskell</li>
</List>
);
}
我們可以看到,props.children
接收從 component 開始到結束 tag 內所有的元素。
此外,我們可以利用 props
來填補:
function ListWithHeader(props) {
return (
<ul className={'List List-' + props.importance}>
<li className="List List-Header">
{props.header}
</li>
{props.children}
</ul>
);
}
function DownloadMenuWithHeader() {
return (
<List importance="High" header={ <LispLogo /> }>
<li>Download SBCL</li>
...
</List>
);
}
通用 component 以及客製化
所以,我們有了一個很棒的 FolderView component
function FolderView(props) {
return (
<div className="FolderView">
<h1>{props.folderName}</h1>
<ul className="FolderView FolderView-Actions">
{props.availableActions}
</ul>
<ul className="FolderView FolderView-Files">
{props.files}
</ul>
</div>
);
}
這可以表達我們檔案系統內任何的資料夾,然而我們只想要區別它,所以它顯示圖片和桌面資料夾。
function DesktopFolder(props) {
return (
<FolderView folderName="Desktop"
availableActions={
<li>Create Folder</li>
<li>Create Document</li>
}
files={props.files}
/>
);
}
function PicturesFolder(props) {
return (
<FolderView
folderName="Pictures"
availableActions={
<li>New Picture</li>
}
files={props.files}
/>
);
}
就是這樣,我們客製化我們的 component,沒有建立任何的繼承結構。
MEET THE NEW JSTIPS BOOK
You no longer need 10+ years of experience to get your dream job.
Use the 100 answers in this short book to boost your confidence and skills to ace the interviews at your favorite companies like Twitter, Google and Netflix.
GET THE BOOK NOW
MEET THE NEW JSTIPS BOOK
The book to ace the JavaScript Interview.
A short book with 100 answers designed to boost your knowledge and help you ace the technical interview within a few days.
GET THE BOOK NOW