Réagir Natif: Obtenir la position d'un élément
Je suis style un Image
composant avec flexbox pour être dans le centre de l'écran, qui fonctionne assez bien. Maintenant, je veux un deuxième Image
composant à être affichés directement sur le dessus de la première. La deuxième image est d'utiliser le positionnement absolu. Actuellement, je suis juste deviner pixels de sorte qu'il s'adapte, mais bien sûr ce n'est pas précis et beaucoup trop de maintenabilité de l'effort.
Je suis à peu près à la recherche pour Réagir Natif équivalent de jQuery .offset()
. Est-il une telle chose et si il n'y a pas quelle est la meilleure façon d'atteindre cet objectif?
Vous devez vous connecter pour publier un commentaire.
Réagir Natif fournit un
.mesure(...)
méthode qui prend un callback et l'appelle avec le décalage et la largeur/hauteur d'un composant:Exemple...
Le suivant calcule la mise en page d'un composant personnalisé après, il est rendu:
Bug notes
Noter que, parfois, le composant n'a pas fini de rendu avant
componentDidMount()
est appelé. Si vous obtenez des zéros comme un résultat demeasure(...)
, puis en l'enveloppant dans unsetTimeout
devrait résoudre le problème, c'est à dire:measure
ne fonctionne pas pour moi. A dû passer de l'élément de poignée:const handle = findNodeHandle(this.refs.dropdown); UIManager.measure(handle, (x, y, ...) ...)
Vous pouvez utiliser
onLayout
pour obtenir la largeur, la hauteur et la parent à parent position d'un composant au plus tôt au moment où ils sont disponibles:Par rapport à à l'aide de
.measure()
, comme indiqué dans la accepté de répondre à, cela a l'avantage que vous n'aurez jamais à bricoler autour de reporter votre.measure()
appels avecsetTimeout
pour s'assurer que les mesures sont disponibles, mais l'inconvénient qu'il ne vous donne pas les décalages par rapport à l'ensemble de la page, seuls par rapport à celle de l'élément parent.J'ai besoin de trouver la position d'un élément à l'intérieur d'une ListView et utilisé cet extrait de code qui fonctionne un peu comme
.offset
:Cela suppose, j'ai eu un
ref='myElement'
sur mon composant.UIManager.measureLayoutRelativeToParent
dans unsetTimeout
appel pour l'empêcher de erroring arrière si vous êtes l'exécution de ce code à partir d'un point dans le composant du cycle de vie avant qu'il ait été rendu. Notez également que pour les modernes Réagir Natifs, vous aurez envie de faireimport { UIManager, findNodeHandler } from 'react-native'
plutôt que l'exige montré ici.J'ai eu un problème similaire et résolu en combinant les réponses ci-dessus
Maintenant, je peux voir la position de mon feedPost élément dans les journaux:
<View onLayout {(event) => {this.handleLayoutChange(event) }} ref={view => { this.feedPost = view; }} > ....
de Ce point de Vue est ce.feedPost.Cela semble avoir changé dans la dernière version de Réagir Natif lors de l'utilisation de références à calculer.
Déclarer les références de cette façon.
Et de trouver la valeur de cette façon.
._component
à Réagir Natif de 0,51 (actuelle de la dernière version en date, sorti 3 jours avant que vous avez posté cette réponse). Vous ne savez pas où vous êtes obtenir à partir d'; pour moi, le premier argument de laref
callback est un composant avec un.measure
méthode.Animated.View
au lieu deView
, par exemple.