Obtenez la fenêtre d'affichage/hauteur de la fenêtre en ReactJS
Comment obtenir la fenêtre d'affichage de la hauteur???
window.innerHeight()
Mais en utilisant reactjs, je ne suis pas sûr de savoir comment obtenir cette information. Ma compréhension est que
ReactDOM.findDomNode()
ne fonctionne que pour les composants créés. Cependant, ce n'est pas le cas pour la document ou corps de l'élément, qui pourrait me donner la hauteur de la fenêtre.
Vous devez vous connecter pour publier un commentaire.
Cette réponse est similaire à Jabran Saeed est, à l'exception des poignées de redimensionnement de la fenêtre ainsi. Je l'ai eu à partir de ici.
.bind(this)
de la fonction de rappel des arguments, puisqu'elle est déjà lié par le constructeur.this.state = { width: 0, height: 0 };
de sorte que l'état de vars ne pas modifier leurs types (si je comprends bien window.innerWidth est entier). Ne change rien, sauf rend le code plus facile à comprendre à mon humble avis. Merci pour la réponse!this.state = { width: window.innerWidth, height: window.innerHeight };
commencer?À L'Aide De Crochets (Réagir
16.8.0+
)Créer un
useWindowDimensions
crochet.Et après cela, vous serez capable de l'utiliser dans vos composants comme ce
Exemple de travail
Réponse originale à cette question
C'est la même chose à Réagir, vous pouvez utiliser
window.innerHeight
pour obtenir la fenêtre d'affichage en cours de la hauteur.Comme vous pouvez le voir ici
return () => window.removeEventListener('resize', handleResize);
pour?cleanup
fonction, vous pouvez la lire iciwindow
's disponibles avant toutwindow
liés. Je vais répondre ci-dessous.req
prop est disponible surgetInitialProps
. Si elle l'est, il est exécuté sur le serveur, alors vous n'aurez pas de fenêtre variables.height: window.innerHeight || props.height
. Cela permettra non seulement de simplifier le code, mais aussi supprime inutilement les changements d'état.componentWillMount
n'est plus recommandé, voir reactjs.org/docs/react-component.html#unsafe_componentwillmount@speckledcarp 's réponse est grande, mais il peut être fastidieux si vous avez besoin de cette logique en plusieurs composants. Vous pouvez restructurer comme une HOC (plus la composante de l'ordre) pour faire de cette logique plus facile de les réutiliser.
withWindowDimensions.jsx
Puis dans votre composante principale:
Vous pouvez également "pile" HOCs si vous avez une autre vous avez besoin d'utiliser, par exemple,
withRouter(withWindowDimensions(MyComponent))
Edit: j'allais Réagir avec un crochet de nos jours (l'exemple ci-dessus ici), comme ils résoudre certains des avancée des problèmes avec HOCs et les classes
J'ai juste passé un peu de sérieux de temps à essayer de comprendre certaines choses à Réagir et les événements de défilement /positions - donc, pour ceux qui cherchent encore, voici ce que j'ai trouvé:
De la fenêtre d'affichage de la hauteur peut être trouvé en utilisant la fenêtre.innerHeight ou à l'aide de document.documentElement.clientHeight. (Fenêtre d'affichage en cours de la hauteur)
La hauteur de l'intégralité du document (corps) peut être trouvé à l'aide de la fenêtre.document.corps.offsetHeight.
Si vous êtes essayant de trouver la hauteur du document et de savoir quand vous avez touché le fond, voici ce que je suis venu avec:
(Ma barre de navigation a été 72px en position fixe, donc la -72 pour obtenir un meilleur défilement de l'événement de déclenchement)
Enfin, voici un certain nombre de faire défiler les commandes de la console.log(), qui m'a aidé à comprendre mes calculs activement.
Ouf! Espérons que cela aide quelqu'un!
Réponses par @speckledcarp et @Jamesl sont à la fois brillant. Dans mon cas, cependant, j'avais besoin d'un composant dont la hauteur pouvait s'étendre sur toute la hauteur de la fenêtre, conditionnelle au moment du rendu.... mais l'appel d'une HOC dans
render()
re-rend toute la sous-arborescence. BAAAD.Plus, je n'étais pas intéressé à obtenir les valeurs que les accessoires, mais voulait simplement un parent
div
qui occupent toute la hauteur de l'écran (ou la largeur, ou les deux).J'ai donc écrit un composant Parent qui offre une hauteur et/ou largeur) div. Boom.
Un cas d'utilisation:
Voici le composant:
Vous pouvez aussi essayer ceci:
J'ai juste édité QoP's réponse actuelle à l'appui de SSR et l'utiliser avec Next.js (réaction de la section 16.8.0+):
/hooks/useWindowDimensions.js:
/yourComponent.js: