Créer un modal dans mon projet React nécessitant l'ajout d'une classe au corps lorsque celui-ci est ouvert et son retrait lors de sa fermeture.
Je pouvais faire cela à l'ancienne méthode jQuery en exécutant du javascript Vanilla qui ajoute/supprime une classe, mais cela ne ressemble pas à la philosophie normale de React.
Devrais-je plutôt définir l'état de mon composant de niveau supérieur pour indiquer que le modal est ouvert ou fermé? Même si je le faisais, comme il est rendu dans la division de la page, c'est toujours un effet secondaire d'éditer l'élément body. Y at-il un avantage à ce câblage supplémentaire?
TL; DR utilisez document.body.classList.add
et document.body.classList.remove
J'aurais deux fonctions qui basculer un morceau d'état pour afficher/masquer le modal dans votre composant externe.
Dans ces fonctions, j'utiliserais les méthodes document.body.classList.add
et document.body.classList.remove
pour manipuler la classe body en fonction de l'état du modal, comme ci-dessous:
openModal = (event) => {
document.body.classList.add('modal-open');
this.setState({ showModal: true });
}
hideModal = (event) => {
document.body.classList.remove('modal-open');
this.setState({ showModal: false });
}
Comme ce que @brian a mentionné, essayez d’avoir un composant conteneur de niveau supérieur qui enveloppe vos autres composants. (en supposant que vous n'utilisez pas redux dans votre application)
Dans ce composant de niveau supérieur:
modalOpen
) pour basculer la classe CSShandleOpenModal
& handleCloseModal
) pour modifier l’état booléen.<Modal />
ReactJS a un composant officiel React Modal, je voudrais simplement utiliser celui-ci: https://github.com/reactjs/react-modal