2017-07-07 2 views
1

親のReactコンポーネントでcomponentDidMount()メソッドを使用してAPIからデータを取得し、それをredux-stateで保存します。redux-storeからデータをロードする場所はどこですか?

私のレンダリングの方法では、私はグローバルredux状態からのデータを使用する必要がある別のコンポーネントがあります。

私は子コンポーネントにデータを送信することができます。または、mapStateToProps()を使用して読み込むことができます。

子コンポーネントのコンストラクタまたはcomponentDidMount()メソッドでconsole.logを調べたり、propsからvarにデータを割り当てると、データが期待どおりに取得されません(初期状態になります)。

私のレンダー方法のConsole.logは最初のレンダリング時の初期状態を表示し、2番目の場合は正しいデータを表示します。

私は正しいデータがあると確信しています。

...ここで、var a = this.props.somethingFromState;正しく割り当てられます。

レンダリング方法が最適です。これを一般的に実行するにはベストプラクティスです。ありがとう。

答えて

2

ここにいくつか質問があります。

データをロードする場所に関しては、実際には、facebook docsが示唆するように、ajaxメソッドを呼び出してデータをロードする正しい場所です。

そのデータを小道具を介して子コンポーネントに渡すかどうかについては、私はDan Abramov(reduxの著者)の案内に従ってpresentational vs container componentsに従っています。要するに、データをロードしてすべてのロジックを実行するコンテナコンポーネントを用意し、必要なものを小道具を介してプレゼンテーションコンポーネントに渡し、可能であればそれらを純粋な関数にします。

正しいデータを取得するタイミングについては、上記ライフサイクルの文書を参照してください。 constructorが発生し、次にcomponentWillMount、次にrender、次にcomponentDidMountが発生することがわかります。したがって、あなたのajax呼び出しがcomponentDidMountのデータを取得した場合、最初にrenderが呼び出され、すでにマウントされているコンポーネントにデータがロードされません。ほとんどの人は、データがajaxからのロードを終了するまでスピンナーを置くことでこれを解決します。単純なif文でこれを達成する必要があります

関連する問題