¿Cómo obtengo la altura de la ventana gráfica en ReactJS? En JavaScript normal uso
window.innerHeight()
pero usando ReactJS, no estoy seguro de cómo obtener esta información. Mi entendimiento es que
ReactDOM.findDomNode()
solo funciona para componentes creados. Sin embargo, este no es el caso para el elemento document
o body
, lo que podría darme altura de la ventana.
javascript
reactjs
window
viewport
Jabran Saeed
fuente
fuente
.bind(this)
de los argumentos de devolución de llamada ya que está vinculado por el constructor.this.state = { width: 0, height: 0 };
para que los vars de estado no cambien sus tipos (si entiendo correctamente window.innerWidth es entero ). No cambia nada, excepto que hace que el código sea más fácil de entender en mi humilde opinión. ¡Gracias por la respuesta!this.state = { width: window.innerWidth, height: window.innerHeight };
comenzar?Usando ganchos (React
16.8.0+
)Crea un
useWindowDimensions
gancho.Y después de eso podrás usarlo en tus componentes de esta manera
Ejemplo de trabajo
Respuesta original
Es lo mismo en React, puede usar
window.innerHeight
para obtener la altura de la ventana gráfica actual.Como puedes ver aqui
fuente
cleanup
función, puedes leer sobre esto aquíreq
accesorio está disponible engetInitialProps
. Si es así, se está ejecutando en el servidor, entonces no tendrá variables de ventana.fuente
height: window.innerHeight || props.height
. Esto no solo simplificará el código sino que también eliminará los cambios de estado innecesarios.componentWillMount
ya no se recomienda, consulte reactjs.org/docs/react-component.html#unsafe_componentwillmountAcabo de editar la respuesta actual de QoP para admitir SSR y usarla con Next.js (React 16.8.0+):
/hooks/useWindowDimensions.js :
/yourComponent.js :
fuente
La respuesta de @speckledcarp es excelente, pero puede ser tediosa si necesita esta lógica en varios componentes. Puede refactorizarlo como un HOC (componente de orden superior) para que esta lógica sea más fácil de reutilizar.
withWindowDimensions.jsx
Luego en su componente principal:
También puede "apilar" HOC si tiene otro que necesita usar, p. Ej.
withRouter(withWindowDimensions(MyComponent))
Editar: Iría con un gancho React hoy en día ( ejemplo anterior aquí ), ya que resuelven algunos de los problemas avanzados con HOC y clases
fuente
Acabo de pasar un tiempo serio resolviendo algunas cosas con React y desplazando eventos / posiciones, así que para aquellos que todavía están buscando, esto es lo que encontré:
La altura de la vista se puede encontrar usando window.innerHeight o mediante document.documentElement.clientHeight. (Altura de la ventana gráfica actual)
La altura de todo el documento (cuerpo) se puede encontrar usando window.document.body.offsetHeight.
Si está intentando encontrar la altura del documento y saber cuándo ha tocado fondo, esto es lo que se me ocurrió:
(Mi barra de navegación tenía 72 píxeles en posición fija, por lo tanto, el -72 para obtener un mejor desencadenador de evento de desplazamiento)
Por último, aquí hay una serie de comandos de desplazamiento a console.log (), que me ayudaron a descubrir mis matemáticas activamente.
¡Uf! Espero que ayude a alguien!
fuente
fuente
Las respuestas de @speckledcarp y @Jamesl son brillantes. En mi caso, sin embargo, necesitaba un componente cuya altura pudiera extender la altura de la ventana completa, condicional en el momento de renderizado ... pero llamar a un HOC dentro
render()
vuelve a representar todo el subárbol. BAAAD.Además, no estaba interesado en obtener los valores como accesorios, sino que simplemente quería un padre
div
que ocupara toda la altura de la pantalla (o ancho, o ambos).Entonces escribí un componente principal que proporciona un div de altura completa (y / o ancho). Auge.
Un caso de uso:
Aquí está el componente:
fuente
También puedes probar esto:
fuente