我在redux环境中使用重新选择记忆选择器。请注意在readme中重新选择这些选择器是可组合的 - 也就是说,一个选择器可以被另一个选择器使用。以下是我的选择:
import { createSelector } from 'reselect';
const getUser = (state) => state.user;
const getRegions = (state) => state.regions;
const getSelectedRegion = (state) => state.selectedRegion;
const getSeals = (state) => state.seals;
const getSignatures = (state) => state.signatures;
export const userData = createSelector(
[ getUser, getSeals, getSignatures ],
(user, seals, signatures) => {
if(user === null) return user;
user.seals = seals.filter(seal => seal.userEmail === user.email);
user.signatures = signatures.filter(signature => signature.userEmail === user.email);
user.isRoot = user.roles.includes('root');
user.isEngineer = user.roles.includes('engineer');
return user;
}
);
export const sealForSelectedRegion = createSelector(
[ userData, getSelectedRegion ],
(user, selectedRegion) => {
let sealForSelectedRegion = user.seals.find(seal => seal.region === selectedRegion.name);
return sealForSelectedRegion;
}
);
请注意userData
选择器如何使用sealForSelectedRegion
选择器。但是,使用和调试这些选择器表明,当userData
被触发并产生新输出时,不会触发sealForSelectedRegion
。我的想法是它应该被触发,因为它的输入userData
产生了更新的结果,因此需要重新计算`sealForSelectedRegion。但这不会发生。
上面列出的重新选择自述文件中也出现了类似的情况。我能看到的唯一区别是不会导出自述文件中组成的选择器。在这个例子中,我想要导出userData
并将其用作sealForSelectedRegion的输入。
所以问题是为什么userData
的更新输出不会触发sealForSelectedRegion
?是因为userData
被导出了吗?如果是这样,为什么这是一个问题?