ここではasyncConnectを使用することをお勧めします。あなたはパラメータとして状態を取得し、データが存在するかどうかチェックすることができます。存在しない場合は、ロードする必要があります。
function checkIfNoteExists(state) {
return state.note && state.note.content;
}
データことが保証されます:あなたはこのような何かを行うことができ、たとえば、あなたはデータが現在の状態で存在しているかどうかを確認する必要がありcheckIfNoteExists
インサイド
@asyncConnect([{
promise: ({ store: { dispatch, getState }, params }) => {
const currentState = getState();
const promises = [];
if (!checkIfNoteExists(currentState)) {
promises.push(dispatch(loadNote(params.id)));
}
if (!checkIfCommentsLoaded(currentState)) {
promises.push(dispatch(loadComments()));
}
if (!checkIfAuthorLoaded(currentState)) {
promises.push(dispatch(loadAuthor()));
}
return Promise.all(promises);
}
}])
@connect(...)
class YouClass extends Component {
...
}
:ここでは簡単な例ですもし存在しなければ、それを約束の配列に加える必要があるでしょう。
@asyncConnect
は、サーバーとクライアントで機能することに注意することも重要です。同形アプリFTW!
幸運を祈る!
なぜミドルウェア、redux-sagaやredux-thunkでノートが存在するかをチェックし、そうでない場合はロードアクションを呼び出すのはなぜですか? – elmeister
@elmeisterはredux-thunkを使って実装しましたが、基本的に一連のディスパッチ(loadDependant())を行いました。しかし、コールクロスコンポーネントコールを作る少し見える。私はその減速機で別々のコンポーネントを持っています noteslist、それぞれ別のフォルダにある注釈 もう一つのポイントはジェネリックにすることですので、私のactioncreator {type:ENSURE_DEPENDANT_EXISTS}にディスパッチできますか? – shnoby
私の意見では、最も簡単な方法は、ノートがnotes /:id 'componentWillMount'にロードされているかどうかをチェックし、スピナーをロードするかどうかを表示し、ノートが利用可能になったら' componentWillReceiveProps'をチェックすることです。 。 – elmeister