2016-09-21 31 views
0

正如標題所述:是否像下面的僞碼被認爲是不好的?傳遞組件作爲道具被認爲是不好的做法?

<Outer 
    a = { ComponentA } 
    b = { ComponentB } 
/> 

var Outer = (props) => { 
    var ComponentA = props.a; 
    var ComponentB = props.b; 

    // do fancy stuff 
    // ... 

    return (
     <div> 
      <ComponentA { ...fancypropsForA } /> 
      <ComponentB { ...fancypropsForB } /> 
     </div> 
    ); 
} 

舉個例子:我用它來通過傳遞一個組件來顯示樹數據,該組件將呈現單個節點的數據。

編輯

按照要求,我將努力使我的問題更加清楚一點。 有一個組件有一些邏輯和一些標記,每當你使用這個組件時都是一樣的。但是該標記中有兩個(或更多)位置應該可以替換。

查看顯示整個月份的日曆。有一個組件呈現單獨的日期,一個呈現星期幾(在頂部的欄中)。 您想在多個地方重複使用該日曆,但每次需要日期/週日組件的不同標記。實現這一

一種方法是:

<Calendar 
    data={ data } 
    weekdayComponent={ MyWeekDayComponent } 
    dateComponent={ MyDateComponent } 
/> 

<Calendar 
    data={ data } 
    weekdayComponent={ SomeOtherWeekDayComponent } 
    dateComponent={ SomeOtherDateComponent } 
/> 

所以,我發現這工作。但我不確定這是否真的很糟糕。

回答

1

只要數據只在一個方向流動,你一般就可以。你的例子有點瑣碎,所以很難看出你想要解決什麼樣的一般問題,但我認爲你實際上在尋找的是高階組件。

https://medium.com/@franleplant/react-higher-order-components-in-depth-cf9032ee6c3e

+0

謝謝您的建議;雖然我無法在您鏈接的特定頁面中找到此方案,但我在該頁面的相關文檔中找到了它:https://facebook.github.io/react/docs/create-fragment.html 甚至有一個這個 – cdx

+0

的proptype在你的編輯中刪除了實際上幫助我的鏈接。 關於對象:使用而不是使用MyTree = withTree(MyNode)更直觀。 '? – cdx

+0

好吧,所以再次通過proptypes doc,我想我錯誤地解釋了「節點」proptype。但有「React.PropTypes.element」和文檔狀態「一個React元素」,所以我想即時通訊罰款嗎? – cdx

相關問題