web-dev-qa-db-ja.com

redux-sagaのgetState?

アイテムのリストがあるストアがあります。アプリが最初に読み込まれるとき、アイテムに基づいていくつかのメモリ内オブジェクトを作成するように、アイテムをデシリアライズする必要があります。アイテムはreduxストアに保存され、itemsReducerによって処理されます。

redux-saga を使用して、副作用としてデシリアライゼーションを処理しようとしています。最初のページのロード時に、アクションをディスパッチします。

dispatch( deserializeItems() );

私の物語は簡単にセットアップされます:

function* deserialize( action ) {
    // How to getState here??
    yield put({ type: 'DESERISLIZE_COMPLETE' });
}

function* mySaga() {
    yield* takeEvery( 'DESERIALIZE', deserialize );
}

デシリアライズサガでは、アイテムのメモリ内バージョンを作成する副作用を処理するため、ストアから既存のデータを読み取る必要があります。ここでそれを行う方法がわからない、またはそれがパターンである場合、redux-sagaで試してみるべきです。

59
Andy Ray

使用できます効果の選択

import {select, ...} from 'redux-saga/effects'

function* deserialize( action ) {
    const state = yield select();
    ....
    yield put({ type: 'DESERIALIZE_COMPLETE' });
}

また、セレクタで使用することもできます

const getItems = state => state.items;

function* deserialize( action ) {
    const items = yield select(getItems);
    ....
    yield put({ type: 'DESERIALIZE_COMPLETE' });
}
159

コードフローが佐賀によって処理されていないときにコールバック関数を使用する場合、選択効果は役に立ちません。この場合、dispatchgetStateをルートサガに渡すだけです。

store.runSaga(rootSaga, store.dispatch, store.getState)

そして、子サガへのパスパラメータ

export default function* root(dispatch, getState) { yield all([ fork(loginFlow, dispatch, getState), ]) }

そして、監視方法で

export default function* watchSomething(dispatch, getState) ...

0
Alex Shwarc