Découvrez, dans cette formation, la bibliothèque React de Facebook.
Vous apprendrez à configurer votre machine de développement.
Vous verrez, grâce au développement d’une application simple les principaux concepts de React
3. Une formation
Plan de la formation
Introduction
1. Une introduction à JSX
2. Rendering des éléments
3. Composants et props
4. State et cycle de vie
5. Gestion des événements
6. Affichage conditionnel
7. Listes et clés
8. Formulaires
9. Notion de State
10. Composition ou héritage ?
Conclusion
16. Une formation
Outils divers
Create React App
https://github.com/facebook/create-react-app
Json Server
https://www.npmjs.com/package/json-server
Http Server
https://www.npmjs.com/package/http-server
23. Une formation
JSX ?
JSX est une extension JavaScript
JavaScript XML
Elle facilite la création d’élément DOM
24. Une formation
Syntaxe et utilisation de JSX
const element = <h1>Bonjour, monde !</h1
>;
Syntaxe de base
25. Une formation
Syntaxe et utilisation de JSX
Fonctionnement
const element = (
<h1 className="greeting">
Bonjour, monde !
</h1>
);
const element = React.createElement(
'h1',
{className: 'greeting'},
'Bonjour, monde !'
);
26. Une formation
Syntaxe et utilisation de JSX
const name = 'Clarisse Agbegnenou';
const element = <h1>Bonjour, {name}</h1
>;
Utilisation de Variable
27. Une formation
Syntaxe et utilisation de JSX
Appel de fonction
function formatName(user) {
return user.firstName + ' ' + user.lastName;
}
const user = {
firstName: 'Kylian',
lastName: 'Mbappé'
};
const element = (
<h1>
Bonjour, {formatName(user)} !
</h1>
);
28. Une formation
Syntaxe et utilisation de JSX
Utilisation sous la forme d’expression
function getGreeting(user) {
if (user) {
return <h1>Bonjour, {formatName(user)} !</
h1>;
}
return <h1>Bonjour, Belle Inconnue.</h1>;
}
29. Une formation
Syntaxe et utilisation de JSX
Spécifier des attributs
const element1 = <div tabIndex="0"></div>;
const element2 = <img src={user.avatarUrl}></i
mg>;
30. Une formation
Syntaxe et utilisation de JSX
Spécifier des éléments enfants
const element = (
<div>
<h1>Bonjour !</h1>
<h2>Content de te voir ici.</h2>
</div>
);
31. Démarrage du projet TodoList
Une formation
https://go.eolem.com/yt
https://go.eolem.com/linkedin
https://go.eolem.com/twitter
32. Rendering des éléments
Une formation
https://go.eolem.com/yt
https://go.eolem.com/linkedin
https://go.eolem.com/twitter
35. Une formation
La méthode render
const element = <h1>Bonjour, monde</h1>;
ReactDOM.render(element, document.getElementById('roo
t'));
36. Une formation
Eléments immuables
Définition : Un objet immuable est un
objet dont l'état ne peut pas être modifié
après sa création
Un éléments React ne peut plus être
modifié après sa création
37. Une formation
Mise à jour de l’arbre DOM
Nous devons appeler la méthode
render() à chaque modification
38. Une formation
Exemple Mise à jour du DOM
function tick() {
const element = (
<div>
<h1>Bonjour, monde !</h1>
<h2>Il est {new Date().toLocaleTimeString()}.</h2>
</div>
);
ReactDOM.render(element, document.getElementById('root'));
}
setInterval(tick, 1000);
39. Rendu des éléments du projet
Une formation
https://go.eolem.com/yt
https://go.eolem.com/linkedin
https://go.eolem.com/twitter
40. Composants et props
Une formation
https://go.eolem.com/yt
https://go.eolem.com/linkedin
https://go.eolem.com/twitter
44. Une formation
Les props
Les Props sont des arguments passés
aux composants de React
Les Props sont transmis aux composants
par le biais d'attributs HTML
Les Props sont « readonly »
45. Une formation
Les props - function
function Welcome(props) {
return <h1>Bonjour, {props.name}</h1>;
}
const element = <Welcome name="Sara" />;
ReactDOM.render(
element,
document.getElementById('root')
);
46. Une formation
Les props - class
class Welcome extends React.Component {
constructor(props) {
super(props)
}
render() {
return <h1>Bonjour {this.props.name} </h1>;
}
}
const element = <Welcome name="Sara" />;
ReactDOM.render( element, document.getElementById('root’));
47. Une formation
Assemblage de composants
function Welcome(props) {
return <h1>Bonjour, {props.name}</h1>;
}
function App() {
return (
<div>
<Welcome name="Sara" />
<Welcome name="Edite" />
</div>
);
}
ReactDOM.render( <App />, document.getElementById('root'));
48. Ajout de Composants
et props au projet
Une formation
https://go.eolem.com/yt
https://go.eolem.com/linkedin
https://go.eolem.com/twitter
49. Etat et cycle de vie
Une formation
https://go.eolem.com/yt
https://go.eolem.com/linkedin
https://go.eolem.com/twitter
50. Une formation
Notion d’état
Convertir une fonction en classe
Ajouter un état local à une classe
Cycle de vie d’un composant
Conseils et Bonnes pratiques
Circulation des données
Plan
51. Une formation
Notion d’état
Définition :
L’état d'un objet est sa forme à un instant
donné, telle que décrite par les valeurs de
l'ensemble de ses propriétés.
Avec React, seuls les composants basés sur
des classes peuvent utiliser la state
53. Une formation
Convertir une fonction en classe
function Clock(props) {
return (
<div>
<h1>Bonjour, monde !</h1>
<h2>Il est {props.date.toLocaleTimeString()}.</h2>
</div>
);
}
54. Une formation
class Clock extends React.Component {
render() {
return (
<div>
<h1>Bonjour, monde !</h1>
<h2>Il est {this.props.date.toLocaleTimeString()}.</h
2>
</div>
);
}
}
Convertir une fonction en classe
55. Une formation
Ajouter un état local à une classe
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}
render() {
return (
<div>
<h1>Bonjour, monde !</h1>
<h2>Il est {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}
56. Une formation
Cycle de vie d’un composant
class Clock extends React.Component {
...
componentDidMount() {
}
componentWillUnmount() {
}
...
}
57. Une formation
Conseils et Bonnes pratiques
Ne modifiez pas la state directement !
// Erroné
this.state.comment = 'Bonjour';
// Correct
this.setState({comment: 'Bonjour'});
58. Une formation
Les mises à jour de l’état peuvent être asynchrones
// Erroné
this.setState({
counter: this.state.counter + this.props.increment,
});
// Correct
this.setState((state, props) => ({
counter: state.counter + props.increment
}));
// Correct
this.setState(function(state, props) {
return { counter: state.counter + props.increment };
});
Conseils et Bonnes pratiques
59. Une formation
Les mises à jour de l’état sont fusionnées
constructor(props) {
super(props);
this.state = { posts: [], comments: []};
}
componentDidMount() {
fetchPosts().then(response => {
this.setState( {posts: response.posts} );
});
fetchComments().then(response => {
this.setState({ comments: response.comments});
});
}
Conseils et Bonnes pratiques
60. Une formation
Circulation des données
Les données descendent
<h2>Il est {this.state.date.toLocaleTimeString()}.</h
2>
<FormattedDate date={this.state.date} />
function FormattedDate(props) {
return <h2>Il est {props.date.toLocaleTimeString()}.</h2>;
}
61. Amélioration du projet :
State et récupération de données
Une formation
https://go.eolem.com/yt
https://go.eolem.com/linkedin
https://go.eolem.com/twitter
62. Gestion des événements
Une formation
https://go.eolem.com/yt
https://go.eolem.com/linkedin
https://go.eolem.com/twitter
64. Une formation
Syntaxe de déclaration d’un event
<button onclick="activateLasers()">
Activer les lasers
</button>
<button onClick={activateLasers}>
Activer les lasers
</button>
HTML
React
65. Une formation
Rappel sur l’utilisation de ‘this’
https://www.w3schools.com/js/js_this.asp
In a method, this refers to the owner object.
Alone, this refers to the global object
In a function, this refers to the global object
In a function, in strict mode, this is undefined
In an event, this refers to the element that received
the event
Methods like call(), and apply() can refer this to any
object
67. Une formation
Syntaxe de déclaration d’un event
class LoggingButton extends React.Component {
handleClick = () => {
console.log('this vaut :', this);
}
render() {
return (
<button onClick={this.handleClick}>
Clique ici
</button>
);
}
}
68. Une formation
Syntaxe de déclaration d’un event
<button onClick={(e) => this.deleteRow(id, e)}>Supprimer la ligne</butto
n>
<button onClick={this.deleteRow.bind(this, id)}>Supprimer la ligne</butto
n>
69. Projet :
Supprimer un élément
Une formation
https://go.eolem.com/yt
https://go.eolem.com/linkedin
https://go.eolem.com/twitter
73. Une formation
Variables d’éléments
function Greeting(props) {
const isLoggedIn = props.isLoggedIn;
if (isLoggedIn) {
return <UserGreeting />;
}
return <GuestGreeting />;
}
ReactDOM.render(
<Greeting isLoggedIn={false} />,
document.getElementById('root')
);
74. Une formation
Condition à la volée
En JavaScript :
true && console.log("ok") => "ok"
false && console.log("ok") => false
true && expression : est toujours évalué à expression
false && expression : est toujours évalué à false
91. Une formation
Composants contrôlés
Problème
<input>, <textarea>, et <select> possèdent aussi un état interne
Les formulaires HTML possèdent un état interne
Solution
L’état interne des éléments sera stocké dans la state React
React devient la « Single Source of Truth» (SSOT)
109. Une formation
Bilan
1. Une introduction à JSX
2. Rendering des éléments
3. Composants et props
4. State et cycle de vie
5. Gestion des événements
6. Affichage conditionnel
7. Listes et clés
8. Formulaires
9. Notion de State
10. Composition ou héritage ?