Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

627
Views
La ventana no está definida en la aplicación Next.js React

En mi aplicación Next.js , parece que no puedo acceder a la window :

Rechazo no controlado (ReferenceError): la ventana no está definida

 componentWillMount() { console.log('window.innerHeight', window.innerHeight); }

Ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Otra solución es el uso de ̶ p̶r̶o̶c̶e̶s̶s̶.̶b̶r̶o̶w̶s̶e̶r ̶ a poco Ejecutar ̶ su comando durante la representación en el cliente solo lado.

Pero el objeto de process ha quedado obsoleto en Webpack5 y también en NextJS, porque es una variable de NodeJS solo para el lado del back-end.

Así que tenemos que usar el objeto de la window trasera del navegador

 if (typeof window != "undefined") { // Client-side-only code }

Otra solución es usar el gancho de reacción para reemplazar el componentDidMount

 useEffect(() => { // Client-side-only code })

over 4 years ago · Santiago Trujillo Report

0

Mueva el código de componentWillMount() a componentDidMount() :

 componentDidMount() { console.log('window.innerHeight', window.innerHeight); }

En Next.js, componentDidMount() se ejecuta solo en el cliente donde estarán disponibles la window y otras API específicas del navegador. De la wiki de Next.js :

Next.js es universal, lo que significa que ejecuta el código primero del lado del servidor y luego del lado del cliente. El objeto de ventana solo está presente en el lado del cliente, por lo que si es absolutamente necesario tener acceso a él en algún componente de React, debe colocar ese código en componentDidMount. Este método de ciclo de vida solo se ejecutará en el cliente. También es posible que desee comprobar si no hay alguna biblioteca universal alternativa que pueda satisfacer sus necesidades.

En la misma línea, componentWillMount() quedará obsoleto en la versión 17 de React, por lo que será potencialmente inseguro de usar en un futuro muy cercano

si

over 4 years ago · Santiago Trujillo Report

0

Si usa React Hooks , puede mover el código al Effect Hook :

 import * as React from "react"; export const MyComp = () => { React.useEffect(() => { // window is accessible here. console.log("window.innerHeight", window.innerHeight); }, []); return (<div></div>) }

El código dentro useEffect solo se ejecuta en el cliente (en el navegador), por lo que tiene acceso a la window .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!