我想按照这个代码在redux-saga
redux-saga
export const getUser = (state, login) => state.entities.users[login] export const getRepo = (state, fullName) => state.entities.repos[fullName]
然后像这样在传奇中使用它:
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) } }
该getUser减速器(甚至是减速器)看起来与我通常期望的减速器看起来非常不同。
getUser
谁能解释选择器是什么,以及getUserreduce-reducer以及reducer如何适合redux-saga?
getUser 不是缩减器,而是确实的选择器,即知道如何从存储中提取特定数据的函数。
选择器 提供了一个额外的层,这样,如果您更改了商店结构,突然之间您users不再在该位置state.entities.users,而是在state.users.objects.entities(或其他任何位置),则只需要更新getUser选择器,而无需更新应用程序中每个要进行更改的位置引用旧位置。
users
state.entities.users
state.users.objects.entities
这使得它们在重构Redux存储时特别方便。