dag*_*da1 43 reactjs redux redux-saga
我想按照这个代码在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?
hor*_*ryd 61
getUser 它不是一个reducer,它确实是一个选择器,也就是说,一个知道如何从商店中提取特定数据的函数.
选择器提供了一个额外的层,这样如果你改变了你的商店结构并且突然间你users不再在那里state.entities.users而是在state.users.objects.entities(或者其他),那么你只需要更新getUser选择器而不是你应用程序中你所做的每个地方引用旧位置.
这使得它们在重构Redux商店时特别方便.
Ori*_*ori 13
选择器是redux状态的getter.像getter一样,选择器封装了状态的结构,并且是可重用的.选择器还可以计算派生属性.
您可以编写选择器,例如您在redux-saga中看到的选择器.例如:
const getUsersNumber = ({ users }) => users.length;
const getUsersIds = ({ users }) => users.map(({ id }) => id);
Run Code Online (Sandbox Code Playgroud)
等等...
您还可以使用reselect,它是Redux的一个简单的"选择器"库,它可以记住选择器以提高它们的效率.
| 归档时间: |
|
| 查看次数: |
14037 次 |
| 最近记录: |