希望寫出越來越優雅的 Code。
簡述 以前我一直不太知道 children 這個 props 可以用在什麼地方?只覺得他是蠻邊緣的東西。
不過最近在看教學影片時體會到了 children 的妙用之處,所以決定寫一篇簡短的筆記來記錄一下。
Modal 一個最簡單的範例就是 Modal。
怎麼說?想想看,一個 modal 的內容有可能是這樣:
也有可能是這樣:
以第一個來說的話他的結構應該會長這樣:
1 2 3 4 5 6 7 8 9 10 export  default  function  Modal (  return  (     <div  className ='modal-backdrop' >        <div  className ="modal" >          <h2 > Some kind of modal title</h2 >          <p > Some kind of modal content like so.</p >        </div >      </div >    ) } 
第二個的話會長這樣:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 export  default  function  Modal (  return  (     <div  className ='modal-backdrop' >        <div  className ="modal" >          <h2 > Some kind of modal title</h2 >          <img  className ='sample-img'  src ="..."  alt ='sample' />           <p >            Lorem ipsum dolor sit amet consectetur            adipisicing elit. Ex nostrum delectus           et velit recusandae quam eveniet?         </p >        </div >      </div >    ) } 
這個時候就要思考,如果我想讓 Modal 的可重用性 發揮到最大的話,該怎麼做比較好?尤其是這種結構可能不太一樣的情況下。
其實就是標題說的,這就是 children 的適用時機。
如果用 props 的話,我沒有辦法同時讓 Modal 支援第一種結構,又支援第二種結構。
可是用 children 的話就不同了,children 有一個最大的特色是可以把 JSX 當作 props 傳給元件 。
所以呢,要達到最開始提到的需求的話,可以這樣子寫:
1 2 3 4 5 6 7 8 9 export  default  function  Modal ({ children } )   return  (     <div  className ='modal-backdrop' >        <div  className ="modal" >          {children}       </div >      </div >    ) } 
接著當我要用 Modal 的時候,只要把內容當作 children 傳進去就搞定了:
1 2 3 4 5 6 7 8 9 <Modal>    <h2 > Some kind of modal title</h2 >      <img  className ='sample-img'  src ="..."  alt ='sample' />      <p >        Lorem ipsum dolor sit amet consectetur        adipisicing elit. Ex nostrum delectus       et velit recusandae quam eveniet?     </p >  </Modal> 
輕輕鬆鬆~