2016-07-05 8 views
3

TL; DR与えられる以下のコード例:ReactDOM.renderでインスタンス化されたコンポーネントにコンテキストを渡すことはできますか?

ReactDOM.render(<MyComponent prop1={someVar} />, someDomNode); 

それは手動MyComponentのインスタンスにcontextを反応させる通過することが可能ですか?

Reactの性質上、奇妙な質問のように聞こえますが、ReactとSemantic UI(SUI)を混ぜて使用するケースがあります。この具体的なケースは、SUIのツールチップ(コンテンツツールヒントが最初に表示されたときに、ツールチップの上記のコードパターンを使用するリアクションコンポーネントです)。したがって、別のReactコンポーネントによって暗黙的に作成されたReactコンポーネントではなく、contextチェーンが破損しているようです。私は手動でcontextpropsに特定のデータを探すために必要なコンポーネントを持つのではなく、行くcontextチェーンを保つことができれば

私は思ったんだけど。そこ方法React.withContextであったが、それを除去して前に0.14を反応0.14.8

答えて

14

番号:

バージョンを反応させます。

あなたはコンテキストとアドホック・コンポーネントを作成することでそれを行うことができますしかし、それはのようになります。

import React from 'react'; 

function createContextProvider(context){ 
    class ContextProvider extends React.Component { 
    getChildContext() { 
     return context; 
    } 

    render() { 
     return this.props.children; 
    } 
    } 

    ContextProvider.childContextTypes = {}; 
    Object.keys(context).forEach(key => { 
    ContextProvider.childContextTypes[key] = React.PropTypes.any.isRequired; 
    }); 

    return ContextProvider; 
} 

そして、次のようにそれを使用します。

const ContextProvider = createContextProvider(context); 

ReactDOM.render(
    <ContextProvider> 
    <MyComponent prop1={someVar} /> 
    </ContextProvider>, 
    someDomNode 
); 
+0

を私はそれを手動で継続することは不可能だった疑いがあります'コンテキスト'チェーン。 Reactのドキュメントとソースコードの解釈が不可能だったように見えましたが、私は確信していました。私はこれと同じような解決策を見ていました。 – webbower

関連する問題