@djEban

Есть ли разница в том, как проверить наличие window в js?

Запускаю проект NextJS. Код сперва выполняется на сервере, следовательно window нет.
const [isMobile, setIsMobile] = useState(window?.innerWidth < 1000);


Но во время билда ругается . что window is undefined. хотя я явно указал optional chaining
Связано ли это, может, с тем, что код переводится в es5 синтаксис? Просто если поставить typeof window !== undefined, то тогда все работает
  • Вопрос задан
  • 212 просмотров
Решения вопроса 1
@wonderingpeanut
Это связано с тем, что html документ формируется на сервере. Как ты сам сказал, на сервере нет window объекта, поэтому он и ругается.

Сделай
const [isMobile, setIsMobile] = useState(undefined);

и при загрузке страницы измени стейт в нужное тебе значение (юзефект)
const [state,setState] = useState();
useEffect(() => {
  if (typeof window !== 'undefined')
    setState(...)
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы