premiers jours avec Facebook ReactJS. Transition de fondu en CSS simple. Cela fonctionne comme prévu avec ReactJS v0.5.1. Ce n'est pas le cas avec v11.1, v12.0, v12.1. Voici le CSS et JSX:
CSS
.example-enter {
opacity: 0.01;
transition: opacity .5s ease-in;
}
.example-enter.example-enter-active {
opacity: 1;
}
.example-leave {
opacity: 1;
transition: opacity .5s ease-in;
}
.example-leave.example-leave-active {
opacity: 0.01;
}
JSX pour ReactJS v12.1
/**@jsx React.DOM*/
var ReactTransitionGroup = React.addons.CSSTransitionGroup;
var HelloWorld = React.createClass({
render: function() {
return (
<ReactTransitionGroup transitionName="example">
<h1>Hello world</h1>
</ReactTransitionGroup>
);
}
});
React.render(<HelloWorld />, document.body);
Voici la liste des Codepens:
Toute aide appréciée.
Cordialement, Luca
Il ressemble à CSSTransitionGroup
utilisé pour animer le montage initial, mais il n’en a plus à partir de React v0.8.0 ou plus. Voir https://github.com/facebook/react/issues/1304 pour un peu plus d'informations.
Une solution consiste simplement à monter le <h1>
après le montage de <HelloWorld>
, comme suit:
/**@jsx React.DOM*/
var ReactTransitionGroup = React.addons.CSSTransitionGroup;
var HelloWorld = React.createClass({
getInitialState: function() {
return { mounted: false };
},
componentDidMount: function() {
this.setState({ mounted: true });
},
render: function() {
var child = this.state.mounted ?
<h1>Hello world</h1> :
null;
return (
<ReactTransitionGroup transitionName="example">
{child}
</ReactTransitionGroup>
);
}
});
React.render(<HelloWorld />, document.body);
Exemple en direct : http://codepen.io/peterjmag/pen/wBMRPX
Notez que CSSTransitionGroup
est destiné à la transition des composants enfants car ils sont ajoutés, supprimés et remplacés dynamiquement, pas nécessairement pour les animer lors du rendu initial. Jouez avec ce TodoList Codepen (adapté de cet exemple dans la documentation de React ) pour voir ce que je veux dire. Les éléments de la liste apparaissent et disparaissent progressivement au fur et à mesure qu'ils sont ajoutés et supprimés, mais ils ne s'affichent pas en fondu dans le rendu initial.
EDIT: Une nouvelle phase de transition "Apparaître" a été introduite récemment pour permettre des effets d'animation sur montage. Voir https://github.com/facebook/react/pull/2512 pour plus de détails. (Le commit a déjà été fusionné dans le maître, j'imagine donc qu'il sera publié avec la v0.12.2.) Théoriquement, vous pouvez faire quelque chose comme ceci pour que le <h1>
apparaisse en fondu sur le montage:
JS
...
<ReactTransitionGroup transitionName="example" transitionAppear={true}>
<h1>Hello world</h1>
</ReactTransitionGroup>
...
CSS
.example-appear {
opacity: 0.01;
transition: opacity .5s ease-in;
}
.example-appear.example-appear-active {
opacity: 1;
}
J'ai examiné le problème un peu plus loin. Avec la version actuelle de ReactJS, il ne semble pas possible d'effectuer une transition CSS initiale. Plus d'infos et réflexions ici .
Très probablement, les choses vont changer avec v0.13.x. Vous pouvez consulter le code source qui comporte un transitionAppear prop.
EDIT: J'ai téléchargé le dernier ReactJS ( v0.13.0 - alpha ) de GitHub et je l’ai construit. Tout fonctionne maintenant en conséquence si vous utilisez transitionAppear prop (doit être défini sur true de manière explicite). Ci-dessous, vous trouverez les CSS et JSX mis à jour, ainsi que l'exemple live:
CSS:
.example-appear {
opacity: 0.01;
transition: opacity 0.5s ease-in;
}
.example-appear.example-appear-active {
opacity: 1;
}
JSX pour ReactJS v0.13.0 - alpha:
/**@jsx React.DOM*/
var ReactTransitionGroup = React.addons.CSSTransitionGroup;
var HelloWorld = React.createClass({
render: function() {
return (
<ReactTransitionGroup transitionName="example" transitionAppear={true}>
<h1>Hello world</h1>
</ReactTransitionGroup>
);
}
});
React.render(<HelloWorld />, document.body);
Exemple en direct : http://codepen.io/lanceschi/pen/NPxoGV
Cordialement, L
apparaître
Normalement, un composant n'est pas transféré s'il est affiché lors du montage du composant
<Transition>
. Si vous souhaitez effectuer la transition sur le premier montage, définissezappear
surtrue
et le composant effectuera la transition dès que le<Transition>
sera monté. à partir du groupe de documents de réactance-transition-groupe
JSX:
<TransitionGroup>
<CSSTransition classNames="fade" appear={true} >
<h1>Hello world!</h1>
</CSSTransition>
</TransitionGroup>
CSS:
.fade-appear {
opacity: 0.01;
z-index: 1;
}
.fade-appear.fade-appear-active {
opacity: 1;
transition: opacity 300ms ease-in;
}
À partir de: