Comment créer une Réagir Modal(qui est à ajouter à la " <body>") avec des transitions?
Il y a un modal dans cette réponse https://stackoverflow.com/a/26789089/883571 qui est de la création d'une Réagir à base Modale, en ajoutant à <body>
. Cependant, j'ai trouvé n'est pas compatible avec la transition addons fournis par Réagir.
Comment en créer un avec des transitions(lors d'entrer et de sortir)?
Vous devez vous connecter pour publier un commentaire.
À réagir conf 2015, Ryan Florence démontré à l'aide de portails. Voici comment vous pouvez créer une simple
Portal
composant...et puis tout ce que vous pouvez normalement faire Réagir, vous pouvez le faire à l'intérieur du portail...
jsbin démo
Vous pouvez également jeter un oeil à Ryan réagir-modal, bien que je n'ai pas réellement utilisé donc je ne sais pas comment cela fonctionne bien avec l'animation.
react-motion
.redux
etreact-intl
.ReactDOM.unmountComponentAtNode(this.portalElement)
danscomponentWillUnmount
, non? Sinon, le Réagir arbre vit encore dans la mémoire. C'est aussi dans lareact-modal
source github.com/reactjs/react-modal/blob/master/lib/components/....J'ai écrit le module réagir-portail qui devrait vous aider.
Réagir 15.x
Voici un ES6 version de la méthode décrite dans cet article:
Juste envelopper tous les éléments que vous voulez être à la fin du DOM avec elle:
Réagir 16.x
Voici une version mise à jour pour Réagir 16:
Exemple de travail
ReactDOM.createPortal
à la place. Je parie que ça va marcher! (Désolé, je n'ai pas le code complet de post en ce moment)Comme d'autres réponses ont déclaré ce qui peut être fait à l'aide de Portails. À partir de
v16.0
Portails sont inclus dans Réagissent.Normalement, lorsque vous revenez à un élément à partir d'un composant de la méthode render, il est monté dans le DOM comme un enfant le plus proche du nœud parent, mais avec des portails, vous pouvez insérer un enfant dans un emplacement différent dans les DOM.
Vérifier exemple de travail ici.
Le problème fondamental ici est que, dans de Réagir, vous êtes uniquement autorisé à monter un composant son parent, qui n'est pas toujours le comportement souhaité. Mais comment résoudre ce problème?
J'ai fait la solution, adressée à résoudre ce problème. Plus détaillée de la définition du problème, de la src et des exemples peuvent être trouvés ici: https://github.com/fckt/react-layer-stack#rationale
Prendre un coup d'oeil à https://github.com/fckt/react-layer-stack/blob/master/README.md#real-world-usage-example voir l'exemple concret qui est la réponse à votre question:
J'ai écrit une bibliothèque pour vous y aider. - Je éviter les DOM insertion hacks utilisé par le Portail de stratégies et de prendre plutôt l'utilisation du contexte de la base de registres pour passer le long de composants à partir d'une source vers une cible.
Ma mise en oeuvre utilisation de la norme Réagir de rendu cycles. Les composants que vous téléporter/compression/transport ne causent pas un double de rendu cycle sur la cible - tout se passe de façon synchrone.
L'API est également structuré de manière à décourager l'usage de la magie des chaînes dans votre code pour définir la source/cible. Au lieu de cela vous devez explicitement de créer et de décorer les composants qui seront utilisés comme cible (Injectable) et la source (Injecteur). Comme ce genre de chose est généralement considéré comme assez magique je pense que Composante explicite de la représentation (nécessitant des importations directes et d'utilisation) peut aider à atténuer la confusion sur l'endroit où un Composant est injecté.
Bien que ma bibliothèque ne vous permettra pas de rendre un enfant direct de ce document.corps, vous pouvez atteindre un niveau acceptable modal effet, en se liant à un niveau de la racine de la composante dans votre composant de l'arbre. J'ai l'intention d'ajouter un exemple de ce cas d'utilisation bientôt.
Voir https://github.com/ctrlplusb/react-injectables pour plus d'info.
Je pense que ce code est plus ou moins explicites et couvre la solution de base de ce que la plupart des gens sont à la recherche pour:
Espère que cela aide. C'est mon actuel de la mise en œuvre d'une transition modale basée sur la réponse ci-dessus: