2016-07-22 16 views
1

私は、アクションをディスパッチする能力を持つグローバルユーティリティとしてReact/Redux関数を実装しようとしています。React/Redux:アクションをディスパッチできるグローバル関数ですか?

これは、ではなく、コンポーネント/コンテナです。他の人がインポートして呼び出すことのできるグローバル/静的関数です。

これは可能ですか?

ご提供いただけるアイデアやご提案をありがとうございます。

+1

はい可能です。 – Brandon

+0

あなたは正確に何をしようとしているのかの例を挙げることができますか?通常、どのような種類のグローバル参照も使用しないようにします。このためReduxは引数としてコンポーネントへのディスパッチを提供します。 – Aaron

+0

アイデアは、どのポイントからでも呼び出せるアプリケーションレベルのエラーモーダルを持つことです。 表示されるエラーメッセージのみを受信し、エラーモーダルを開くアクションを(呼び出し元を代わって)ディスパッチするユーティリティメソッドが必要になります。 – djbuttery

答えて

6

dispatchStoreに由来しており、Storeのグローバル参照が必要です。

だからあなたのアプリケーションルートは次のようになりますと仮定します

export const store = createStore(root); 

そして、あなたの静的utilのインポートから店舗:

const store = createStore(rootReducer); 

ReactDOM.render(<Provider store={store} /> ...); 

ちょうどstoreことをエクスポート

import {store} from "../path/to/app/root"; 

store.dispatch({ ... }); 

これを行うより良い方法は、あなたのutil関数をdispatchを引数として受け入れることです。この方法では、storeへのグローバル参照はありません。

+0

ユーティリティメソッドがディスパッチする必要があることは奇妙に思えます...ディスパッチは、通常、非同期の "サンク"スタイルのアクションクリエータで呼び出されます - このページから約2/3を参照してください - http://redux.js.org/docs/advanced /AsyncActions.html。 本当に "静的な"ヘルパーは純粋で、アクションにディスパッチされる必要があるものを単に返すと思います。 – Bronson

+0

私は同意します。これは実行可能ですが、おそらくアンチパターンです。 – Aaron

+0

これは私が必要としていたものです!ある程度Redux/React初心者であったので、あなたはこの方法で店を輸出することができるとは思わなかった。 ありがとう! – djbuttery

0

私は古い学校です。 app.jsで私はどうなる:それだ

window.store = store 

- ストアグローバル暴露などをインポートする必要これは、サーバー側のレンダリングを破るしませんが、あなたはどのような場合にはグローバルなディスパッチを使用している場合、それは壊れます。このTwitterのスレッドを参照してください:https://twitter.com/Grynn/status/955485816389685248

はダン・アブラモフ(上記のスレッドで)からの回答を引用:

は大きな製品に実際に起こる ページ(のいくつかのようにアプリが存在する場合、テストは難しく、壊れ作り)、サーバ のレンダリングが不可能になります。それ以外の場合は、それは大丈夫です

関連する問題