如何在saga函数中访问redux状态?
我有一个由以下部分组成的应用程序:
import { select } from 'redux-saga';
...
let data = yield select(stateSelectorFunction);
Run Code Online (Sandbox Code Playgroud)
每个部分都是一个不同的组件,它有自己的减速器,传奇,动作和状态.
工具栏有一个保存按钮,可以调度"SAVE_PROJECT"动作类型.问题是我不希望工具栏知道项目(它有更多的职责,我只是希望它发送类型的动作).
我有一个项目相关的传奇,它听取了"SAVE_PROJECT":
import { select } from 'redux-saga';
...
let data = yield select(stateSelectorFunction);
Run Code Online (Sandbox Code Playgroud)
我无法从传奇中的redux状态获得该项目.
我不认为我可以在当前项目reducer中听取"SAVE_PROJECT"事件,然后在reducer内部获取项目并向项目发送不同的操作.
我真的不希望我的工具栏知道整个状态树,并为每个动作发送与动作相关的任何内容.
我怎样才能将状态传递给传奇?还是只有国家的相关部分?
我想按照这个代码在redux-saga
export const getUser = (state, login) => state.entities.users[login]
export const getRepo = (state, fullName) => state.entities.repos[fullName]
Run Code Online (Sandbox Code Playgroud)
然后将其像传奇使用此:
import { getUser } from '../reducers/selectors'
// load user unless it is cached
function* loadUser(login, requiredFields) {
const user = yield select(getUser, login)
if (!user || requiredFields.some(key => !user.hasOwnProperty(key))) {
yield call(fetchUser, login)
}
}
Run Code Online (Sandbox Code Playgroud)
这种getUser
减速器(甚至是减速器)与我通常期望的减速器看起来非常不同.
任何人都可以解释选择器是什么,getUser
减速器是如何以及它如何适应redux-saga?