Redux 如何将参数传递给createSelector的结果函数(重新选择)
我的redux商店有两个独立的部分A和B 我需要一个记忆选择器,它只在a发生变化时返回从B派生的内容 比如说Redux 如何将参数传递给createSelector的结果函数(重新选择),redux,reselect,Redux,Reselect,我的redux商店有两个独立的部分A和B 我需要一个记忆选择器,它只在a发生变化时返回从B派生的内容 比如说 const getSliceA = (state) => state.A export const getSliceB = createSelector( getSliceA, (a) => { return MyDerive(state.B) } ) 我的问题是如何将state或state.B发送到resultFunc const compareBySliceA
const getSliceA = (state) => state.A
export const getSliceB = createSelector(
getSliceA,
(a) => { return MyDerive(state.B) }
)
我的问题是如何将state或state.B发送到resultFunc
const compareBySliceA=(prevSate:RootState,newState:RootState)=>{
//这只是一个示例,您可以比较切片的内部
if(newState.SliceA==prevState.SliceB){
返回真值
}
返回false;
};
常量getDerivedSliceB(状态:RootState):列表=>
state.SliceB.filter(ElementB=>ElementB.visible)
const createComparatorSelector=createSelectorCreator(
默认记忆化,
比勒比什利西亚,
);
导出常量myDeepSelector=createComparatorSelector(
(状态:RootState)=>状态,
(state:RootState):List=>getderivedsicleb(state),
);
compareBySliceA和getDerivedSliceB都需要公共父级,即在上面的示例状态中,是SliceA和SliceB的parnet。因此,您只想在
状态A
更改时重新计算,而不想在状态B
更改时重新计算。不同的状态.B
不会影响状态派生结果吗?有什么理由不向resultFunc提供两个状态片吗?@Andreacarro我找到了一个解决方案,可以使用“createSelectorCreator”并自定义defaultMemoize的“isEqual”。正如您所建议的,我必须将这两个片段发送到defaultMemoize。谢谢。@Hiran你能把你的解决方案作为答案发布吗。这会有帮助的。Thanks@bsapaka请参阅我的答案,如果您需要任何澄清,请随时询问。
const compareBySliceA = (prevSate: RootState, newState: RootState) => {
// This is just an example you can compare inner of Slice A
if (newState.SliceA === prevState.SliceB) {
return true
}
return false;
};
const getDerivedSliceB (state: RootState): List<any> =>
state.SliceB.filter(ElementB => ElementB.visible)
const createComparatorSelector = createSelectorCreator(
defaultMemoize,
compareBySliceA,
);
export const myDeepSelector = createComparatorSelector(
(state: RootState) => state,
(state: RootState): List<any> => getDerivedSliceB(state),
);