Я что-то упустил с useEffect, useCallback и deps.
У меня есть один контекст и один компонент. Мой компонент загружает все нужные мне данные с помощью fetch () и устанавливает логическое значение true в контексте, чтобы показать счетчик. Я использую контекст в другом компоненте, когда мне это нужно.
const LoadingApp = ({children}) => {
const loadingContext = useContext(LoadingContext);
const fetchMyData = useCallback(() => {
loadingContext.setLoading(true);
}, [loadingContext]);
useEffect(() => {
fetchMyData();
}, [fetchMyData]);
return (
<React.Fragment>
{children}
</React.Fragment>
);
};
const LoadingProvider = ({children}) => {
const [loading, setLoading] = useState(false);
const setLoading = useCallback((isLoading) => {
setLoading(loading + (isLoading ? 1: -1));
}, [setLoading, loading]);
const isLoading = useCallback(() => {
return loading > 0;
}, [loading]);
return (
<LoadingContext.Provider value={{setLoading, isLoading}}>
{children}
</LoadingContext.Provider>
)
}
Я знаю, что могу удалить deps из useEffect или useCallback, но это неправильный способ исправить мою проблему, поскольку deps требуется.
Как я могу вызвать функцию в контексте в useEffect или useCallback без повторного рендеринга всего?