出于某些奇怪的奇怪原因,我的重选选择器正在返回此函数:
ƒ () {
if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {
// apply arguments instead of spreading for performance.
lastResult = func.apply(null, arguments);
}
我不明白为什么要这么做。它应该返回一些JSON,我可以用它在我的 mapToProps 中进行映射。
我的redux映射非常简单,看起来像这样:
const mapStateToProps = (state) => {
return {
initialValues: selectShop(state),
}
}
我的选择器文件如下:
import { createSelector } from 'reselect';
//shops selector
const selectDomain = () => state => (state ? state.shops : {});
export const selectShop = () =>
createSelector(
selectDomain(),
shops => {
let shop = shops.filter(shop => shop.selected);
return shop[0];
},
);
为什么我要返回一个函数而不是JSON?
答案 0 :(得分:1)
您使用的createSelector
错误。实际上,它返回一个函数的记忆版本。
类似的事情应该起作用
import { createSelector } from 'reselect';
//shops selector
const selectDomain = state => (state ? state.shops : []); // I've fixed it to return an array
export const selectShop = createSelector(
selectDomain,
// you could use find instead of `filter` herr
shops => shops.find(shop => shop.selected)
)
答案 1 :(得分:0)
也可以添加到接受的答案中。选择器被称为错误。这就是应该正确调用的方式:
const mapStateToProps = (state) => {
let selector = selectShop()
return {
initialValues: selector (state),
}
}