Я подозреваю, что вам будет намного лучше с useEffect
, построенным на Window.matchMedia , чем чем-то, использующим innerWidth
. Это JavaScript эквивалент css медиазапросов. Таким образом, вы используете что-то управляемое событиями.
Примерно так:
const [ navOpen, setNavOpen ] = useState(true)
useEffect(() => {
const x = window.matchMedia("(max-width: 700px)")
function myFunction(e) {
setNavOpen(false);
};
x.addListener(myFunction)
return () => x.removeListener(myFunction);
}, []);
Примечание: поскольку у него есть прослушиватель событий, обратите внимание, что для удаления прослушивателя возвращается функция очистки.
credit: я скопировал часть своего кода из w3schools
Редактировать: добавить пустой массив зависимостей по рекомендации @ agus-zubiaga