2017-02-08 59 views
1

將複雜對象或類繼承到每個ReactJS-Component的最佳方式是什麼?繼承nodeJs請求的推薦方法ReactJS中的對象

正如他們的文檔中所述,不建議使用上下文,我猜測使用prop也不是最好的解決方案。

這是我們的情況:

編輯:也許一個更好的例子是,當我們試圖繼承路由器請求對象爲孩子SSR的20級方面的原因

我們使用的是路由器它適用於客戶端和SSR。對於呈現的每條路線,我們需要在客戶端和服務器上生成一個生成的類來處理。所以,一個解決方案應該是這樣的:

class MyComponent extends React.Component { 
    constructor(props) { 
    super(props); 
    this.myAwesomeObject = new AwesomeClass({/* some settings */}); 
    } 
    getChildContext() { 
    let { myAwesomeObject } = this; 
    return { 
     myAwesomeObject 
    }; 
    } 
    render(){ 
    return (
     <span><ComponentLevel1 /></span> 
    ); 
    } 
} 

const ComponentLevel1 =() => { 
    return (
    <div> 
     <ComponentLevel2 /> 
    </div> 
); 
}; 
const ComponentLevel2 =() => { 
    return (
    <div> 
     <ComponentLevel3 /> 
    </div> 
); 
}; 
...... 
const ComponentLevel20 = (props) => { 
    content = this.context.myAwesomeObject.doSomeThingWithProps(props); 
    return (
    <div> 
     {content} 
    </div> 
); 
}; 

在這個例子中,我現在可以使用中的每個組件的awesomeObject我將呈現,但不建議通過ReactJS上下文: https://facebook.github.io/react/docs/context.html

所以我的問題現在是:什麼是最好的推薦方式繼承這樣的類到所有組件?

我知道:在客戶端這不是問題,因爲我可以創建對象一次,並在客戶端全局但在服務器(SSR)上使用它,我也需要訪問創建的類。每當我需要在另一個組件中重新創建對象似乎不是最好的解決方案 - 也不要將此類添加到任何組件作爲屬性 - 對嗎?

編輯 我已編輯的代碼片段,以表明它可能有我孩子的20級需要訪問該實例的情況下。有了上下文,它可以像我的例子那樣工作,但ReactJS表示不推薦。所以另一種解決方案是將該類添加到我的孩子的屬性中 - 20個關卡 - 但是這是真正解決此問題的最佳推薦解決方案嗎?

回答

1

作曲怎麼樣? (https://facebook.github.io/react/docs/composition-vs-inheritance.html

class SomeComponent extends React.Component { 
    render() { 
     return(
      <SomeOtherComponent {...this.props} /> 
     ) 
    } 
} 

通過了所有的道具到不同的組件(包括它的孩子),你可以輕鬆地定製子組件的行爲。

+0

所以當我在20級需要這個類的組件時,我必須爲每個孩子添加20次類,直到我達到需要該類的那個類爲止?或者有另一種解決方法嗎? – TJR