У меня есть useEffect в моих маршрутах в App.js
<Switch>
<Route exact path={['/en', '/fr']} component={HomePage} />
<Route path={['/en/*', '/fr/*']}>
<Route path="/:lang/*" component={DefaultLanguage} />
в том же файле (App.js) у нас есть такой компонент (с использованием response-localize-redux):
const DefaultLanguage = withLocalize(
({ activeLanguage, setActiveLanguage, ...props }) => {
useEffect(() => {
console.log('setting active language');
setActiveLanguage(props.match.params.lang);
}, []);
return <></>;
}
);
Проблема в том, что каждая ссылка, по которой я нажимаю, запускает setActiveLanguage, хотя я поставил []
, чтобы он запускался только при первом рендеринге (потому что это единственный раз, когда я забочусь о настройке языка из URL-адреса). У меня была эта проблема и в других частях приложения. . Насколько я понимаю, useEffect не должен запускаться каждый раз, когда компонент монтируется, если только его зависимости не меняются, но, похоже, мне не хватает детали.