サガ関数内でredux状態にアクセスするにはどうすればよいですか?
短い答え:
import { select } from 'redux-saga';
...
let data = yield select(stateSelectorFunction);
@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の興味深いスレッドもチェックしてください。
これが「セレクタ」機能の目的です。状態ツリー全体を渡すと、状態の一部が返されます。セレクターを呼び出すコードは、データが返されたという状態でwhereを知る必要はありません。いくつかの例については、 http://redux.js.org/docs/recipes/ComputingDerivedData.html を参照してください。
サガ内では、 select()
API を使用してセレクターを実行できます。