web-dev-qa-db-ja.com

redux-saga関数内の状態/ストアから何かを取得する方法は?

サガ関数内でredux状態にアクセスするにはどうすればよいですか?

短い答え:

import { select } from 'redux-saga';
...
let data = yield select(stateSelectorFunction);
88
Adam Tal

@markeriksonが既に言っているように、redux-sagaは非常に便利なAPIを公開します select() 状態でselectorを呼び出して、その一部をサガ内で利用可能にします。

あなたの例では、単純な実装は次のようになります。

/*
 * Selector. The query depends by the state shape
 */
export const getProject = (state) => state.project

// Saga
export function* saveProjectTask() {
  while(true) {
    yield take(SAVE_PROJECT);
    let project = yield select(getProject); // <-- get the project
    yield call(fetch, '/api/project', { body: project, method: 'PUT' });
    yield put({type: SAVE_PROJECT_SUCCESS});
  }
}

@ -markeriksonの提案された doc に加えて、Reduxでselectorsを使用する方法を説明するD. Abramovによる非常に優れた ビデオチュートリアル があります。 this Twitterの興味深いスレッドもチェックしてください。

163
NickGnd

これが「セレクタ」機能の目的です。状態ツリー全体を渡すと、状態の一部が返されます。セレクターを呼び出すコードは、データが返されたという状態でwhereを知る必要はありません。いくつかの例については、 http://redux.js.org/docs/recipes/ComputingDerivedData.html を参照してください。

サガ内では、 select() AP​​I を使用してセレクターを実行できます。

26
markerikson