ReferenceError: window is not defined

`window`-objektet finns inte på servern och kan inte refereras under server-rendering.

Förklaring

window är ett webbläsarobjekt som inte existerar i Node.js-miljön där Next.js renderar serverdelen av din app. Om en komponent refererar till window under render-fasen kraschar servern med det här felet.

Det spelar ingen roll om komponenten är markerad med 'use client' — det räcker inte alltid. Next.js pre-renderar även klientkomponenter på servern om de inte är dynamiskt importerade. Server-sidan körs alltid utan window.

Felet dyker ofta upp när kod importeras från ett tredjepartsbibliotek som inte är designat för server-side rendering.

Vanliga orsaker

Direkt referens till window, document, navigator, eller screen i render-fasen. Import av bibliotek som anropar window vid modulinitiering, till exempel chart-bibliotek och analytics-SDK:er.

Lösning

Flytta window-anrop till useEffect, som enbart körs i webbläsaren:

useEffect(() => {
  const width = window.innerWidth;
  setWidth(width);
}, []);

För tredjepartsbibliotek som kraschar vid import, använd dynamisk import med ssr: false:

import dynamic from "next/dynamic";
const Chart = dynamic(() => import("./Chart"), { ssr: false });