如何对我的 `rawTranscript` 变量进行记忆化,以便它不会触发下面的 `useEffect` ,从而导致昂贵的 `transcriptParser` 函数被触发?虽然我尝试了很多不同的方法,但事实是我正在使用 redux-hook (`useAppSelector`) 来捕获存储在 store 中的数据,这意味着我无法为初始挂载使用一个空依赖项 useEffect (hooks 不能在 useEffect 中)。出于同样的原因,我似乎也无法用一层`useMemo` 包裹 `useAppSelector`。
你有什么想法可以记忆化 `rawTranscript` 变量,使其不会重新触发 `useEffect`?
当使用redux-hook 在`useMemo`、`useEffect`、`useCallback`内时出现错误: >React Hook “useAppSelector” cannot be called inside a callback. React Hooks must be called in a React function component or a custom React Hook function.
组件
你有什么想法可以记忆化 `rawTranscript` 变量,使其不会重新触发 `useEffect`?
当使用redux-hook 在`useMemo`、`useEffect`、`useCallback`内时出现错误: >React Hook “useAppSelector” cannot be called inside a callback. React Hooks must be called in a React function component or a custom React Hook function.
组件
const TranscriptCardController = (): JSX.Element => {
const dispatch = useAppDispatch();
// how to memoize rawTranscript?
const rawTranscript = useAppSelector(selectRawTranscript);
const parsedTranscript = useAppSelector(selectParsedTranscript);
useEffect(() => {
const parsedResult = transcriptParser(rawTranscript, undefined, 0.9);
dispatch(updateParsedTranscript(parsedResult));
}, [dispatch, rawTranscript]);
// ...
};
选择器
export const selectRawTranscript = createSelector(
(state: RootState) => state.transcript.rawTranscript,
(rawTranscript): RawTranscript => rawTranscript
);