Redux createSelector似乎不记得结果



我一直在阅读关于createSelector的文档,我的印象是它应该记住结果以避免昂贵的计算。然而,由于某种原因,我的console.logs不应该触发的函数中触发。好奇为什么会这样,我做错了什么吗?当我到达这个特定组件时,数据已经以相同的形状存在于存储中,因此应该记住它。

  • 注:useAppDispatchuseAppSelector与默认值相同,它们只是在中心位置的ts类型。

in my component:

const dispatch = useAppDispatch();
const rawTranscript = useAppSelector(selectRawTranscript);
const parsedTranscript = useAppSelector(selectParsedTranscript);
const parsedResult = useMemo(() => {
// rawTranscript should be memoized ... 
return transcriptParser(rawTranscript, undefined, 0.9);
}, [rawTranscript]);
useEffect(() => {
// this also fires, I initially had the parsed result here but the same behavior happened.
// const parsedResult = transcriptParser(rawTranscript, undefined, 0.9);
dispatch(updateParsedTranscript(parsedResult));
}, [dispatch, parsedResult]);

in my redux slice:

// selectRawTranscript should be memoized (createSelector is used)
export const selectRawTranscript = createSelector(
(state: RootState) => state.transcript.rawTranscript,
rawTranscript => rawTranscript
);
export const selectParsedTranscript = createSelector(
(state: RootState) => state.transcript.parsedTranscript,
parsedTranscript => parsedTranscript
);

你的选择器真的没有' memoizing';任何东西。任何时候使用createSelector而输出选择器只是x => x时,都不会发生真正的记忆。这完全等同于一个普通的函数,只有state => state.x-你只是返回字段的原样。

根据到目前为止您所展示的代码,每当减速器更新state.transcript.rawTranscriptstate.transcript.parsedTranscript字段时,组件将重新呈现,并且每次更新state.transcript.rawTranscript字段时,效果将重新运行。

我建议阅读一下最近更新的Redux文档关于选择器的页面,以便更好地了解何时,如何以及为什么编写记忆选择器函数。

另外,让的效果依赖于解析的文本,然后还调度一个看起来像是保存解析值的动作,这似乎有点奇怪,并且有可能导致额外的重新呈现。

,

相关内容

  • 没有找到相关文章

最新更新