Reactjs 调用redux saga中的组合重选选择器
我正试图从Reactjs 调用redux saga中的组合重选选择器,reactjs,redux,redux-saga,reselect,Reactjs,Redux,Redux Saga,Reselect,我正试图从redux saga调用一个组合选择器。我的想法是我有两个下拉列表。第一个下拉列表中的选项将在第二个下拉列表中过滤适当的值,即我的组合选择器将过滤掉一些不相关的值,因此它们不会显示在第二个下拉列表中: 1) 我有两个选择器,firstSelector和secondSelector // firstSelector returns {"Cat":["black","white"],"Dog":["grey"]} const firstSelector= () => create
redux saga
调用一个组合选择器。我的想法是我有两个下拉列表。第一个下拉列表中的选项将在第二个下拉列表中过滤适当的值,即我的组合选择器将过滤掉一些不相关的值,因此它们不会显示在第二个下拉列表中:
1) 我有两个选择器,firstSelector
和secondSelector
// firstSelector returns {"Cat":["black","white"],"Dog":["grey"]}
const firstSelector= () =>
createSelector(selectPage, substate => substate.firstDropDown);
// secondSelector returns ["black","grey"]
const secondSelector= () =>
createSelector(selectPage, substate => substate.secondDropDown);
2) 我在组合选择器中组合这些选项(应返回[“黑色”、“灰色”]
,即过滤掉“白色”)
3) 但是我如何调用redux saga
中的filterBySelection
?
我试过:
const filteredValues = yield select(
filterBySelection,
firstSelector,
secondSelector,
);
及
及
但这些方法不起作用
不过,我可以调用firstSelector
或secondSelector
,即:
const firstData= yield select(firstSelector());
有人会说,在redux传奇中,我可以简单地做到以下几点:
const first = yield select(firstSelector());
const second = yield select(secondSelector());
const filtered = Object.keys(first).reduce(
(r, k) => r.concat(first[k]),
[],
);
const secondFiltered = second.filter(
val => first.indexOf(val) >= 0,
);
但这将不会记忆
,其想法是记忆
那么,在redux传奇中是否可以使用记忆选择器呢
致以最诚挚的问候您似乎没有调用函数返回选择器。因此,要么: (a) c) 定义
firstSelector
和secondSelector
而不使用函数(可能是最正确的方法):
然后
希望有帮助。我会选择这样的
createSelector(
firstSelector,
secondSelector,
(first, second) => {
const filteredValues = Object.keys(first).reduce(
(r, k) => r.concat(first[k]),
[],
);
return second.filter(val => filteredValues.indexOf(val) >= 0);
},
);```
我认为您可以在createSelector中删除数组,只需将子选择器作为参数传递
constFilterBySelection=(firstSelector,secondSelector)=>createSelector(firstSelector,secondSelector,(first,second)=>{constFilteredValues=Object.keys(first)。reduce((r,k)=>r.concat(first[k]),[],返回second.filter(val=>filteredValues.indexOf(val)>=0);},)代码>这正是我的选择器。这不是问题/问题。我是说,你应该删除数组,删除数组时,你不需要使用括号()谢谢!我觉得这很有帮助。我将一个单独的选择器组合到主选择器中,一切正常。在单独的选择器导致问题之前(搜索词过滤以及单独的无线电过滤器)。正确。。。我错过了呼叫组合选择器中的选择器:P谢谢!
const firstData= yield select(firstSelector());
const first = yield select(firstSelector());
const second = yield select(secondSelector());
const filtered = Object.keys(first).reduce(
(r, k) => r.concat(first[k]),
[],
);
const secondFiltered = second.filter(
val => first.indexOf(val) >= 0,
);
const filterBySelection = (firstSelector, secondSelector) =>
createSelector(
[
firstSelector(), // <- parentheses
secondSelector(), // <- parentheses
], ... )
const filteredValues = yield select(
filterBySelection(firstSelector(), secondSelector())
);
const firstSelector =
createSelector(selectPage, substate => substate.firstDropDown);
const secondSelector =
createSelector(selectPage, substate => substate.secondDropDown);
const filteredValues = yield select(
filterBySelection(firstSelector, secondSelector)
);
createSelector(
firstSelector,
secondSelector,
(first, second) => {
const filteredValues = Object.keys(first).reduce(
(r, k) => r.concat(first[k]),
[],
);
return second.filter(val => filteredValues.indexOf(val) >= 0);
},
);```