Comment obtenir la hauteur de la fenêtre dans ReactJS? En JavaScript normal, j'utilise
window.innerHeight()
mais en utilisant ReactJS, je ne sais pas comment obtenir ces informations. Ma compréhension est que
ReactDOM.findDomNode()
ne fonctionne que pour les composants créés. Cependant ce n'est pas le cas pour l' élément document
ou body
, qui pourrait me donner la hauteur de la fenêtre.
javascript
reactjs
window
viewport
Jabran Saeed
la source
la source
.bind(this)
des arguments de rappel car il est déjà lié par le constructeur.this.state = { width: 0, height: 0 };
pour que les variables d'état ne changent pas leurs types (si je comprends bien window.innerWidth est un entier ). Ne change rien sauf rend le code plus facile à comprendre à mon humble avis. Merci d'avoir répondu!this.state = { width: window.innerWidth, height: window.innerHeight };
pas commencer?Utiliser des crochets (React
16.8.0+
)Créez un
useWindowDimensions
crochet.Et après cela, vous pourrez l'utiliser dans vos composants comme celui-ci
Exemple de travail
Réponse originale
C'est la même chose dans React, vous pouvez utiliser
window.innerHeight
pour obtenir la hauteur de la fenêtre actuelle.Comme vous pouvez le voir ici
la source
cleanup
fonction, vous pouvez en savoir plus icireq
accessoire est disponible surgetInitialProps
. Si c'est le cas, il s'exécute sur le serveur, vous n'aurez pas de variables de fenêtre.la source
height: window.innerHeight || props.height
. Cela simplifiera non seulement le code, mais supprimera également les changements d'état inutiles.componentWillMount
n'est plus recommandé, voir reactjs.org/docs/react-component.html#unsafe_componentwillmountJe viens de modifier la réponse actuelle de QoP pour prendre en charge SSR et l'utiliser avec Next.js (React 16.8.0+):
/hooks/useWindowDimensions.js :
/yourComponent.js :
la source
La réponse de @speckledcarp est excellente, mais peut être fastidieuse si vous avez besoin de cette logique dans plusieurs composants. Vous pouvez le refactoriser en tant que HOC (composant d'ordre supérieur) pour rendre cette logique plus facile à réutiliser.
withWindowDimensions.jsx
Puis dans votre composant principal:
Vous pouvez également «empiler» des HOC si vous en avez un autre à utiliser, par exemple
withRouter(withWindowDimensions(MyComponent))
Edit: J'irais avec un hook React de nos jours ( exemple ci-dessus ici ), car ils résolvent certains des problèmes avancés avec les HOC et les classes
la source
Je viens de passer un peu de temps sérieux à comprendre certaines choses avec React et à faire défiler les événements / positions - donc pour ceux qui cherchent encore, voici ce que j'ai trouvé:
La hauteur de la fenêtre peut être trouvée à l'aide de window.innerHeight ou à l'aide de document.documentElement.clientHeight. (Hauteur actuelle de la fenêtre)
La hauteur du document entier (corps) peut être trouvée à l'aide de window.document.body.offsetHeight.
Si vous essayez de trouver la hauteur du document et de savoir quand vous avez touché le bas, voici ce que j'ai trouvé:
(Ma barre de navigation était 72px en position fixe, donc le -72 pour obtenir un meilleur déclencheur d'événement de défilement)
Enfin, voici un certain nombre de commandes de défilement vers console.log (), qui m'ont aidé à comprendre activement mes mathématiques.
Ouf! J'espère que cela aide quelqu'un!
la source
la source
Les réponses de @speckledcarp et @Jamesl sont toutes deux brillantes. Dans mon cas, cependant, j'avais besoin d'un composant dont la hauteur pourrait étendre toute la hauteur de la fenêtre, conditionnelle au moment du rendu ... mais appeler un HOC à l'intérieur
render()
re-rend le sous-arbre entier. BAAAD.De plus, je ne voulais pas obtenir les valeurs comme accessoires, mais je voulais simplement un parent
div
qui occuperait toute la hauteur de l'écran (ou la largeur, ou les deux).J'ai donc écrit un composant Parent fournissant un div de pleine hauteur (et / ou largeur). Boom.
Un cas d'utilisation:
Voici le composant:
la source
Vous pouvez également essayer ceci:
la source