在 mapState 中使用 Reselect 将选择器值加在一起
Using Reselect in mapState to add together selector values
感觉我在这里遗漏了一些简单的东西。
如果我有以下选择器(见代码)。使用 Reselect 如何将它们组合在一起以创建新的选择器?我想做这样的事情...
export const mapState = (state, ownProps) => {
return {
//SELECTORS!
sub1: selector(state, 'sub1') || 0,
sub2: selector(state, 'sub2') || 0,
totalSelector: createSelector(sub1, sub2, (sub1, sub2) => ({total: sub1 + sub2}))
};
};
这需要在 mapState 之外完成吗?当前第 6 行的 sub1 和 sub2 未定义。
是的,它们需要在创建对象之前定义,例如:
export const mapState = (state, ownProps) => {
const sub1 = selector(state, 'sub1') || 0;
const sub2 = selector(state, 'sub2') || 0;
return {
//SELECTORS!
sub1,
sub2,
totalSelector: createSelector(sub1, sub2, (sub1, sub2) => ({total: sub1 + sub2}))
};
};
问题在于,在您的 mapState
中,您将 undefined 传递给 createSelector
函数,因为 sub1
和 sub2
尚未创建。您需要在构造返回的对象之前创建它们。
感觉我在这里遗漏了一些简单的东西。
如果我有以下选择器(见代码)。使用 Reselect 如何将它们组合在一起以创建新的选择器?我想做这样的事情...
export const mapState = (state, ownProps) => {
return {
//SELECTORS!
sub1: selector(state, 'sub1') || 0,
sub2: selector(state, 'sub2') || 0,
totalSelector: createSelector(sub1, sub2, (sub1, sub2) => ({total: sub1 + sub2}))
};
};
这需要在 mapState 之外完成吗?当前第 6 行的 sub1 和 sub2 未定义。
是的,它们需要在创建对象之前定义,例如:
export const mapState = (state, ownProps) => {
const sub1 = selector(state, 'sub1') || 0;
const sub2 = selector(state, 'sub2') || 0;
return {
//SELECTORS!
sub1,
sub2,
totalSelector: createSelector(sub1, sub2, (sub1, sub2) => ({total: sub1 + sub2}))
};
};
问题在于,在您的 mapState
中,您将 undefined 传递给 createSelector
函数,因为 sub1
和 sub2
尚未创建。您需要在构造返回的对象之前创建它们。