Introduction aux Animations dans React
() translation by (you can also view the original English article)
Dans les deux derniers tutoriels de React, vous vous êtes familiarisé avec les concepts de base React comme JSX, le routage et les formulaires. Dans ce tutoriel, nous allons passer au niveau suivant et essayer de comprendre les animations dans React.
Mise en route
Créez un répertoire nommé ReactAnimations
. Accédez au répertoire et lancez le projet en utilisant Node Package Manager ou npm.
1 |
mkdir ReactAnimations
|
2 |
cd ReactAnimations
|
3 |
npm init |
Installer react
et react-dom
au projet.
1 |
npm install react react-dom --save |
Nous allons utiliser webpack
module bundler pour ce projet. Installez webpack
et le serveur de développement webpack.
1 |
npm install webpack webpack-dev-server --save-dev |
Installez le paquet babel
pour convertir la syntaxe JSX
en JavaScript dans notre projet.
1 |
npm install --save-dev babel-core babel-loader babel-preset-react babel-preset-es2015 |
Créez un fichier de configuration requis par webpack-dev-server
où nous allons définir le fichier d'entrée, le fichier de sortie et le chargeur babel. Voici comment ressemble webpack.config.js
:
1 |
module.exports = { |
2 |
entry: './app.js', |
3 |
module: { |
4 |
loaders: [ |
5 |
{
|
6 |
exclude: /node_modules/, |
7 |
loader: 'babel-loader?presets[]=es2015&presets[]=react' |
8 |
}
|
9 |
]
|
10 |
},
|
11 |
output: { |
12 |
filename: 'bundle.js' |
13 |
}
|
14 |
};
|
Créez un fichier index.html
dans lequel l'application sera rendue. Voici comment il ressemble:
1 |
<html>
|
2 |
<head>
|
3 |
<title>TutsPlus - React Animations</title> |
4 |
</head>
|
5 |
<body>
|
6 |
<div id="app"></div> |
7 |
<script src="bundle.js"></script> |
8 |
</body>
|
9 |
</html>
|
Créez un fichier nommé app.js
. À l'intérieur de l'app.js
importez les bibliothèques de react requises comme indiqué:
1 |
import React from 'react'; |
2 |
import {render} from 'react-dom'; |
Créez un composant apatride appelé Home
qui rend une balise H1
.
1 |
const Home = () => { |
2 |
return ( |
3 |
<h2>{'TutsPlus - Welcome to React Animations!'}</h2> |
4 |
);
|
5 |
};
|
Rendez le composant Home à l'intérieur de l'élément app dans la page index.html
. Voici comment app.js
ressemble:
1 |
import React from 'react'; |
2 |
import {render} from 'react-dom'; |
3 |
|
4 |
const Home = () => { |
5 |
return ( |
6 |
<h2>{'TutsPlus - Welcome to React Animations'}</h2> |
7 |
);
|
8 |
};
|
9 |
|
10 |
render( |
11 |
<Home />, |
12 |
document.getElementById('app') |
13 |
);
|
Enregistrez les modifications ci-dessus et démarrez le serveur de webpack
. Vous devriez avoir votre application en cours d'exécution à http://localhost:8080/index.html.
Animations dans React
React fournit un certain nombre d'utilitaires supplémentaires pour la création d'applications React. TransitionGroup
et CSSTransitionGroup
sont les API fournies pour l'animation.
De la documentation officielle,
Le composantReactTransitionGroup
add-on est une API de bas niveau pour l'animation etReactCSSTransitionGroup
est un composant complémentaire pour faciliter la mise en œuvre d'animations et de transitions CSS de base.
Apparaître des Animations
Commençons par essayer une animation simple dans React. Installez le react-addons-css-transition-group
dans le projet.
1 |
npm install react-addons-css-transition-group --save |
Importez ReactCSSTransitionGroup
à l'intérieur du fichier app.js
.
1 |
import ReactCSSTransitionGroup from 'react-addons-css-transition-group' |
Dans le composant Home
que vous avez créé, enveloppez la balise h2
à l'intérieur de la balise ReactCSSTransitionGroup
.
1 |
<div>
|
2 |
<ReactCSSTransitionGroup transitionName="anim" transitionAppear={true} transitionAppearTimeout={5000} transitionEnter={false} transitionLeave={false}> |
3 |
<h2>{'TutsPlus - Welcome to React Animations'}</h2> |
4 |
</ReactCSSTransitionGroup>
|
5 |
</div>
|
À l'aide de la balise ReactCSSTransitionGroup
, vous avez défini la partie où l'animation aurait lieu. Vous avez spécifié un nom pour la transition à l'aide de transitionName
. Vous avez également défini si la transition devrait apparaître, entrer et quitter se produire ou non.
En utilisant le nom de transition défini à l'intérieur du ReactCSSTransitionGroup
, vous définirez les classes CSS qui seraient exécutées lors de l'affichage et quand elles sont en état actif. Ajoutez le style CSS suivant à la page index.html
.
1 |
.anim-appear { |
2 |
opacity: 0.01; |
3 |
}
|
4 |
|
5 |
.anim-appear.anim-appear-active{ |
6 |
opacity: 2; |
7 |
transition: opacity 5s ease-in; |
8 |
}
|
Comme vous l'auriez remarqué, vous devez spécifier la durée de l'animation à la fois dans la méthode de rendu et dans CSS. C'est parce que c'est comme ça que React sait quand supprimer les classes d'animation de l'élément et quand supprimer l'élément du DOM.
Enregistrez les modifications ci-dessus et actualisez la page. Une fois la page chargée, en quelques secondes vous devriez pouvoir voir le texte animé.
Enter/Leave Animation
Pour obtenir une meilleure compréhension d'enter et leave d'animation, nous allons créer une petite application React. L'application aurait une zone de texte d'entrée pour entrer le nom. Vous verrez comment ajouter l'animation d'entrée lorsqu'un nom est ajouté à la liste.
À l'intérieur de app.js
, créez une nouvelle classe appelée App
.
1 |
class App extends React.Component { |
2 |
|
3 |
}
|
Initialiser une liste de data
et une variable de name
dans l'état initial du composant.
1 |
class App extends React.Component { |
2 |
constructor(props) { |
3 |
super(props); |
4 |
this.state = { |
5 |
data: [], |
6 |
name:'' |
7 |
};
|
8 |
}
|
9 |
}
|
À l'intérieur de la partie de rendu du composant App, placez une zone de texte d'entrée pour entrer le nom et un bouton pour ajouter le nom à la liste de matrice.
1 |
<div>
|
2 |
Enter Name <input onChange={this.handleChange} type="text" /> <input onClick={this.add} type="button" value="Add" /> |
3 |
</div>
|
Définissez l'événement handleChange
d'entrée et l'événement add
dans le composant App.
1 |
handleChange(e){ |
2 |
this.setState({name:e.target.value}) |
3 |
}
|
L'événement handleChange
définit la valeur de la zone de texte d'entrée à la variable de name
. Voici comment ressemble la méthode add:
1 |
add(){ |
2 |
var arr = this.state.data.slice(); |
3 |
arr.push({'id':(new Date()).getTime(),'name':this.state.name}) |
4 |
this.setState({data:arr}) |
5 |
}
|
Dans la méthode add
, le nom saisi et un identifiant unique sont envoyés à la liste des matrices de data
.
Liez la méthode handleChange
et add
dans le constructeur du composant App.
1 |
constructor(props) { |
2 |
super(props); |
3 |
this.add = this.add.bind(this); |
4 |
this.handleChange = this.handleChange.bind(this); |
5 |
this.state = { |
6 |
data: [], |
7 |
name:'' |
8 |
};
|
9 |
}
|
Vous allez afficher les noms saisis dans une liste. Modifiez le code HTML de rendu pour ajouter la liste.
1 |
<ul>
|
2 |
{ |
3 |
this.state.data.map(function(player) { |
4 |
return <li key={player.id}>{player.name}</li> |
5 |
}) |
6 |
} |
7 |
</ul>
|
Pour animer les éléments nouvellement ajoutés, nous ajouterons la balise ReactCSSTransitionGroup
sur les éléments li
.
1 |
<ul>
|
2 |
<ReactCSSTransitionGroup transitionName="anim" transitionAppear={false} transitionEnterTimeout={5000} transitionEnter={true} transitionLeave={false}> |
3 |
{ |
4 |
this.state.data.map(function(player) { |
5 |
return <li key={player.id}>{player.name}</li> |
6 |
}) |
7 |
} |
8 |
</ReactCSSTransitionGroup>
|
9 |
</ul>
|
Ajoutez le style de transition CSS
suivant à la page index.html
.
1 |
.anim-enter { |
2 |
opacity: 0.01; |
3 |
}
|
4 |
|
5 |
.anim-enter.anim-enter-active { |
6 |
opacity: 2; |
7 |
transition: opacity 5s ease-in; |
8 |
}
|
Voici la composante complète d'App:
1 |
class App extends React.Component { |
2 |
constructor(props) { |
3 |
super(props); |
4 |
this.add = this.add.bind(this); |
5 |
this.handleChange = this.handleChange.bind(this); |
6 |
this.state = { |
7 |
data: [], |
8 |
name:'' |
9 |
};
|
10 |
}
|
11 |
add(){ |
12 |
var arr = this.state.data.slice(); |
13 |
arr.push({'id':(new Date()).getTime(),'name':this.state.name}) |
14 |
this.setState({data:arr}) |
15 |
}
|
16 |
handleChange(e){ |
17 |
this.setState({name:e.target.value}) |
18 |
}
|
19 |
render() { |
20 |
return ( |
21 |
<div> |
22 |
Enter Name <input onChange={this.handleChange} type="text" /> <input onClick={this.add} type="button" value="Add" /> |
23 |
|
24 |
<ul> |
25 |
<ReactCSSTransitionGroup transitionName="anim" transitionAppear={false} transitionEnterTimeout={3000} transitionEnter={true} transitionLeave={false}> |
26 |
{
|
27 |
this.state.data.map(function(player) { |
28 |
return <li key={player.id}>{player.name}</li> |
29 |
})
|
30 |
}
|
31 |
</ReactCSSTransitionGroup> |
32 |
</ul> |
33 |
|
34 |
</div> |
35 |
)
|
36 |
}
|
37 |
}
|
Sauvegardez ce qui précède et actualisez la page. Entrez un nom et entrez le bouton add, et l'élément doit être ajouté à la liste avec animation.
De même, l'animation de leave peut également être implémentée dans le code ci-dessus. Une fois la fonctionnalité de suppression a été implémentée dans l'application, ajoutez la classe leave
et leave-active
à index.html
. Définissez la transitionLeave
sur True
dans la balise ReactCSSTransitionGroup
dans la méthode de rendu, et vous devriez être prêt à aller.
Finissons-en
Dans ce tutoriel, vous avez vu comment commencer à utiliser les animations dans React. Vous avez créé une application React simple et vous avez vu comment implémenter l'animation appear et enter. Pour des informations détaillées sur les animations dans React, je vous recommande de lire la documentation officielle.
Le code source de ce tutoriel est disponible sur GitHub.
Au cours des dernières années, React a gagné en popularité. En fait, nous avons un certain nombre d'articles sur le marché qui sont disponibles pour l'achat, l'examen, la mise en œuvre, et ainsi de suite. Si vous recherchez des ressources supplémentaires sur React, n'hésitez pas à les consulter.
Faites-nous savoir vos pensées dans les commentaires ci-dessous. Jetez un coup d'oeil à ma page d'instructeur Envato Tuts+ pour plus de tutoriels sur React et les technologies Web connexes.