2016-04-16 11 views
0

私はすべてのコンポーネントが利用できるようにするために私のアプリにいくつかのグローバル変数を設定しようとしています。たとえば、「言語」プロパティと「ステータス」プロパティを各コンポーネントに渡したいとしましょう。このプロパティはページにレンダリングされず、代わりに各コンポーネントの小道具に追加されます。これは、各コンポーネントが適切なスタイルと言語をロードして出力するときにその変数を確認できるようになります。小道具(またはグローバル変数)を取得

ルータに小道具を追加するなどの簡単なことが望めましたが、何を試しても、小道具は私の子供のコンポーネントで「未定義」として戻ってきます(メインのlayoutWrapperコンポーネントのみが小道具を取得します)。これはこれまでの様子です:

//app.js 

var LayoutWrapper = React.createClass({ 
    render: function() { 
    return (
     <Layout status="available" /> 
    ); 
    } 
}); 

ReactDOM.render(
    <Router history={hashHistory}> 
    <Route path="/" language="en-gb" component={LayoutWrapper}> 
    <IndexRoute component={Index}></IndexRoute> 
    </Route> 
    </Router>, 
app); 

答えて

2

グローバルレベルの状態データを扱うときは、Fluxのような状態フレームワークを使用することをお勧めします。私はReduxを推奨しています。これは、ボイラープレートコードを削減して、接続されたコンポーネントにアプリケーション状態を簡単に渡すことができます(その後、これらのコンポーネントを状態の変更にサブスクライブする)。

「グローバル」小道具を作成する一貫した方法がないため、あなたがしていることは失敗します。変数contextを使用できますが、これは実稼働環境での使用には推奨されない不安定な機能です。それ以外の場合は、手動で親から子にあなたの小道具を明示的に渡す必要があります。

+0

ああ、意味があります。私はフラックスを使用して各コンポーネントに状態(mongodbインスタンスから取得)を与えましたが、コンポーネントの外で使用できることはわかりませんでした。私はReduxを見てみましょう、私はそれがフラックスと同じものであることを認識しませんでした、私は後で還元を学ぶつもりでした。 –

+0

ええ、国家フレームワークの全体的なポイントは、階層的に関連していないコンポーネント(とそれが意味を成すならば同様です)間の状態を共有するのに役立ちます。 ReduxはFluxに比べて、単一のストア(状態の追跡が容易になります)、移動時間、ホットリロードなど、いくつかの利点があります。 – ZekeDroid

+0

それは完璧な意味合いを持っています。私は実際には、それぞれのコンポーネントごとに異なる店舗を作らなければならないということを本当に喜んでいませんでした。助けてくれてありがとう! –

関連する問題