Предупреждение приходит, потому что вы используете переменную состояния внутри функции useEffect
. Это предупреждение может появиться только в том случае, если вы напрямую не используете переменную состояния.
Один из способов сделать это, а также оптимизировать этот код - использовать useCallback/useMemo
. Проверьте следующий код:
export const LocaleProvider = ({ children }) => {
const [state, dispatch] = useReducer(reducer, { locale: DEFAULT_LOCALE });
useEffect(() => {
const storedLocale = getStoredLocale();
if (storedLocale) dispatch(changeLocale(storedLocale));
}, []);
const getCurrentLocale = useCallback(() => state.locale, [state.locale])
useEffect(() => {
const currentLocale = getCurrentLocale();
saveLocale(currentLocale);
}, [getCurrentLocale]);
return (
<LocaleContext.Provider value={[state, dispatch]}>
{children}
</LocaleContext.Provider>
);
};
С помощью приведенного выше кода вы можете ограничить зависимости, как вы хотели.