2017-12-18 27 views
0

私は、アプリケーションの開始時にサーバーからロードされるいくつかの初期データを持っています。Sagaで何らかのアクションが発生した後、すべてのアクションが実行されるようにするにはどうすればよいですか?

InitialDataLoadedのようなアクションをロードしてから起動します。

このデータは状態に保存され、将来のサーバーとの通信に使用されます。

アプリがそのデータを読み込んでいる間に、他のリクエストがtakeEvery(action)によって送信される可能性があります。初期のデータが現時点では入手できない場合は、初期データがないと意味がないため、これらの要求を送信することはできません。

すべての依存するアクションが、必要なアクションが発生したときにのみリクエストを引き起こすことを確認する方法を教えてください。

答えて

1

takeEveryに送信できるその他のリクエストがUIによって開始されているかどうかはわかりません(初期データが読み込まれているかどうかを確認してUIを無効にしたい場合)。

しかし、あなたは佐賀の中の話をしている場合は、このようなInitialDataLoadedのアクションを待つことができます。

function* watchAppInit() { 
    while (true) { 
    // when this completes it dispatches the InitialDataLoaded action 
    yield fork(loadInitialData); 

    yield take(actionTypes.InitialDataLoaded); 

    // this won't execute until InitialDataLoaded action is dispatched 
    yield fork(doOtherStuff); 
    } 
} 

たり、他のアクションの状態を確認することができます。

function* watchDoOtherStuff() { 
    while (true) { 
    const action = yield take(actionTypes.DO_OTHER_STUFF); 

    // check the state to see if you have initial data 
    const initialized = yield select(selectors.getInitialDataLoaded); 

    if (initialized) { 
     yield fork(doIt); 
    } 
    } 
} 
+0

最初理想的なソリューション – Cleiton

関連する問題