26
loading...
This website collects cookies to deliver better user experience
react-navigation
provides a hook called useIsFocused
, which allows your component to render different content based on the current focus state of the screen.useSelector
hook for Redux, which will only return fresh selected state when our screen is in focus:import { useRef } from 'react';
import { useIsFocused } from '@react-navigation/core';
import { useSelector } from 'react-redux';
const undefinedRef = Symbol();
export function useAppSelector<Selected = unknown>(
selector: (state: RootState) => Selected,
ignoreUnfocusedScreens: boolean = true,
equalityFn?: (left: Selected, right: Selected) => boolean,
) {
const memoizedSelectorResult = useRef<Selected | Symbol>(undefinedRef);
const isScreenFocused = useIsFocused();
return useSelector((state: RootState) => {
if (
memoizedSelectorResult.current === undefinedRef ||
!ignoreUnfocusedScreens ||
isScreenFocused
) {
memoizedSelectorResult.current = selector(state);
}
return memoizedSelectorResult.current as Selected;
}, equalityFn);
}