2016-03-17 12 views
8

をフェッチ/私たちは、データソースからのデータで満たされる必要がある私達のページをレンダリングするサーバ側にしたいサーバー側が反応して私たちは、当社のウェブサイトを構築している

反応し、ルータ/ Reduxの。このトランザクションは非同期でなければならず、残念なことにサーバーサイドのレンダリングが必要なので、 "componentDidMount"関数を使用することはできません。あなたがルータに反応のようなものを使用した場合、あなたはまた、静的なFetchDataとして依存関係を取得 あなたのデータを表現する場合があります

:セクションhereレンダリングサーバ側でReduxのチュートリアルページでは、に

を知らされていましたあなたの ルートハンドラコンポーネントの()メソッドを呼び出します。それらは非同期アクションを返す可能性があります。したがって、 handleRender関数はルートハンドラ コンポーネントクラスへのルートと一致し、それぞれについてfetchData()の結果を送出し、 はプロミスが解決された後にレンダリングされます。このように、異なるルートに必要な特定の APIコールは、ルート ハンドラコンポーネント定義と一緒に配置されます。クライアント側の でも同じ方法を使用して、 のデータがロードされるまで、ルータがページを切り替えるのを防ぐことができます。

これは現在、データの取り込みを処理する方法です。私は個人的にはこのアプローチが気に入らず、非常に不器用に見え、ルーティングライブラリにも結合されています。それを行うためのよりよい方法がありますか?うまくいけば標準的な反応/ルータ/ reduxコンポーネントでですか?

+0

"このトランザクションは非同期でなければなりません"なぜですか? – flup

+0

多くの場合、APIからのデータフェッチは非同期であり、メインスレッドをブロックしないようにします。特に、複数のAPIから取得する場合は、可能な場合は他を待たせたくありません。 –

答えて

5

静的なようなものは、一般的なケースでReact Routerでデータを取得する正しい方法ですが、必要に応じて子コンポーネントに到達できます(Relayの動作など)。

このようにしたい理由は、React Routerがすべての一致したルートを一度に解決するからです。それで、すべてのルートハンドラのデータフェッチを同時に実行できます。

代わりに、コンポーネントのインスタンスレベルのハンドラにデータフェッチを関連付けると、すべての親が必要なデータを受け取るまで、コンポーネントが必要なデータをフェッチすることができないなど、フェッチすることになります。 。サーバー上ではそれほど大きな問題ではないかもしれませんが、クライアント上では非常に最適ではありません。

実際にコンポーネントにデータ依存関係を配置する場合は、React Resolverのようなものを使用することを検討することができますが、これはユーザーにとって最適ではない状況に簡単につながります。

+0

私はリアクションレゾルバを見ていきますが、非常に良い通知をいただきありがとうございます。 – ralzaul

+0

リレーとは何ですか?リンクや参照はありますか? –

+0

また、 'connect'のようにHoCを使用するときに静的fetchDataメソッドを使用することは可能ですか? –

関連する問題