コンポーネントがレンダリングされる前にアクションをディスパッチしたい。ただし、アクションは redux-saga と統合された非同期アクションです。
非同期アクションがいつ実行されるかを知る必要があります。実行されている場合は、コンポーネントをレンダリングします。これを機能させるために、コンテナごとに一意の ID を用意し、アクションが完了すると、属性 { loaded: true } がストアに保存されます。
このように考えています
@preload('uniqueId', (dispatch) => new Promise((resolve, reject) => {
dispatch(MyAction(resolve, reject));
})
@connect(....)
class MyComponent extends React.Component {
....
}
@preload
componenWillMount
(サーバー側の場合) または(クライアント側の場合)で指定されたアクションをトリガーする関数でcomponenDidMount
あり、アクションが呼び出されるresolve()
と、state.preloadState.uniqueId.loaded
が に設定されtrue
ます。また、コンポーネントをラップして、state.preloadState.uniqueId.loaded === true
.
@connect
指定したアクションで redux ストアにプリロードしたいデータを接続します。
Redux、redux-saga アプリ、およびサーバー側のレンダリングでもデータのプリロードを行うのが一般的な方法なのだろうか (以前は redux-async-connect を使用していましたが、ネストされたすべてのコンポーネントでデータのプリロードを実行できるようにしたいので、いくつかの静的関数の代わりに componentWillMount にバインドします)。