0% ont trouvé ce document utile (0 vote)
25 vues102 pages

React

Transféré par

mohamed reddam
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
25 vues102 pages

React

Transféré par

mohamed reddam
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 102

ReactJs

A.Karim

1
2
Rappel JavaScript

3
4
5
6
7
let ,var et const
Scope : let et const sont BlockScoped

Redeclaration : on ne peut pas redéclarer


let et const(ce qui nous évite les bugs : lors
de l’utilisation des librairies externes)

Hoisting : appel avant la declaration

var est global (on peut y accéder depuis


l’objet window)

8
Fonction flechées (arrow
functions)

function addn(a,b)
const add=(a,b)=>{
{

return a+b;
return a+b;
}
}
console.log(addn(5,8));
console.log(add(1,3));

const add=(a,b)=> a+b;

const pow=a=> a*a;

9
Spread (tableaux et objets)
const arr = [1,2,3];
const arr2 = [...arr, 4]

console.log(arr2);

const myObj = {
a: 1,
b: 2,
c: 3
}
const myObj2 = {
...myObj,
d: 4
}

console.log(myObj2);
10
Rest
/*let
obj={age1:13,age2:12,age3:23};

for(let key in obj)


{
const add=(...args)=>
{ console.log(obj[key]);
console.log(args);
let result = 0;
for(let arg of args){ // for of pour les tableau }
// for in pour */
les objets

result += arg; let arr=[1,2,3];


}
return result; for(let i of arr)
} {
console.log(i);
console.log(add(2,2,20,50,900)); }

11
fonction d'ordre général :(HOF :
Higher-order function)
Ce sont des fonctions qui prennent une
autre fonction en paramètres ou qui en
retourne une autre ou les deux.

12
const rawArr = [5, 6, 5889, 52, 415, 120];
function supArr(arr, fn)
{
const newArr = [];
for (let i = 0; i < arr.length; i++)
{
if (fn(arr[i]))
{
newArr.push(arr[i]);
}
}
return newArr;
}

13
const arrSup100 = supArr(rawArr, (item) =>
{ if(item > 100){
return item;
}})
const arrSup10 = supArr(rawArr, (item) =>
{ if(item > 10){
return item;
}})
console.log(arrSup100);
console.log(arrSup10);

14
map , filter et forEach (array)

const arr = [1,2,3,4,5,6];

const mapedArr = arr.map(x => x + 10); // return

console.log(mapedArr);

const filteredArr = arr.filter(num => num > 2) // return

console.log(filteredArr);

arr.forEach(val =>
{ console.log(val - 90);
})

15
detructuring
possibilité d'affecter un objet ou un tableau

const pays = { nom: "Italie", pop: 60}

const {nom, pop} = pays; // pays.nom // pays.pop

ou un tableau à un autre

const arr = [1,2,3];


const [a,b,c] = arr; // a= arr[0] // b=arr[1] // c=arr[2]

16
-React est une bibliothèque JavaScript libre développée par
Facebook depuis 2013.

-Le but principal de cette bibliothèque est de faciliter la


création d'application web monopage (spa single page
application)

17
Le DOM virtuel (VDOM) est un concept de
programmation dans lequel une représentation
« virtuelle », d’une interface utilisateur (UI) est
conservée en mémoire et synchronisée avec le
DOM « réel » par une bibliothèque telle que
ReactDOM. Ce processus s’appelle
réconciliation.
Créer react application :

Installer nodejs

Executer la commande :

npm install -g create-react-app

Executer la commande :

npx create-react-app nom_application


22
fichiers
Public/index.html : l’application va se
charger dans le div root (single page
application)

Dossier source : écrire les traitements js


(création des components)

SRC/index.js : sert à retourner l’application


dans le div root

23
JSX
 En anglais, c'est pour javascript xml.
 ça va nous permettre d'écrire du html (fermer chaque
balise+minuscule)en javascript.
function App() {
return (
<div className="App">
<h1 className="App-header">Hello
</h1>
{5+5}
{0?100:'ABC'}

</div>
);

24
Activer emmet(jsx)
Setting---(extension)emmet

25
Setting (ouvrir setting.json) et ajouter:

"emmet.includeLanguages": {

"javascript":"javascriptreact"

26
27
Premier composant
Dans le dossier SRC créer un fichier js
(exemple : Item.js)
rfcfunction
: (React
Item() { Function Components)
return (

<h1 className="App-header">Hello From


Item
</h1>
);

}
export default Item;

Installer l’extension ES7 React (rfc : créer component)

28
rcc:(React Class Components)

import React, { Component } from 'react'

export default class Item extends Component {


render() {
return (
<div>
<h1> Hello class component </h1>
</div>
)
}
}

29
Utiliser le composant
import logo from './logo.svg';
import './App.css';
import Item from './Item'

function App() {
return (
<div className="App">
<h1 className="App-header">Hello
</h1>
<Item/> Retourner un bloc
</div>
);

export default App;


30
state
State : donnée d’un composant

import { useState } from 'react';

31
import { useState } from 'react';

function App() {

let [mystate,setmystate]=useState(10);
let [mystate2,setmystate2]=useState(20);
const modify =()=>{
setmystate(20);
}
return (
<div className="App">
<h1 className="App-header" onClick={modify}>Hello
</h1>
{mystate}
{mystate2}
</div> );
}
32 export default App;
props
Un objet(qui peut contenir des attributs ou
des méthodes) (passé par le parent : qui
utilise le composant fils)
Fils Parent

function Item(props) {
return (
<Item txt='hello
<h1 className="App-
header">{props.txt} 1'/>
</h1> <Item txt='hello
);
2'/>
}
export default Item;

33
Appliquer css
Méthode 1:

<h1
style={{ color:'red',textDecoration:'und
erline' }}

 let ok=true;
 <h1 style={{ color: ok ? 'red' :
'white',textDecoration:'underline' }}

34
Méthode 2 : dans un fichier CSS

import './itemcss.css';
function Item(props) {
let ok=true;
return (

<h1 className="c1" >{props.txt}-{props.number}


</h1>
);

}
export default Item;
35
Les images
import nom_image from
'./nom_image.jpg';
<img src={nom_image } />
Ou bien :

<img src={"http:\\ ………….. "} />

On peut utiliser les images svg comme des


composants
Import {ReactComponent as im } from ‘….svg’

36
1-installer bootstrap : npm install
bootstrap

2-importer bootstrap :
 import
'../node_modules/bootstrap/dist/css/bootstrap.min.css';

Créer un dossier components dans lequel


vous créez components Form.js et Item.js

37
input
const [inputdata,setinputdata]=useState();

const changedata=(e)=>{

setinputdata(e.target.value);
console.log(inputdata);
}

<input type="text" onChange={e=>changedata(e)} />

38
TP1_Calculatrice

39
Rendu conditionnel
const [toggle, setToggle] = useState(true);

const changeState = () => {


setToggle(!toggle);
};

let toggleContenu;

if (toggle) {
toggleContenu = <h1>Le state est True</h1>;
} else {
toggleContenu = <h1>Le state est False</h1>;
}

return(

<div className="App">
{toggleContenu}
<button onClick={changeState}>Change state</button>
</div>

);

40
Toggle de class CSS
const [toggle, setToggle] = useState(false);
.box {
const changeState = () => { width: 200px;
setToggle(!toggle); height: 200px;
}; background: salmon;
margin: 30px;
return ( transition: transform 0.4s;
<div className="App">
<div className={toggle ? "box animated" : }
"box"}></div> .animated {
<button onClick={changeState}>Change background: lightblue;
state</button> transform: scale(1.3);
</div> }
);

41
Créer des listes (map)
const [dataArr, setDataArr] = useState([
{nom: "Nom1"},
{nom: "Nom2"},
{nom: "Nom3"}
]);

return (
<div>
<ul>
{dataArr.map((item, index) => {
console.log(index);
return <li key={index}>Nom : {item.nom}</li>
})}
</ul>
</div>
);
42
TP2_slider images

43
TP3_Todo-List

44
Form.js import {useState} from 'react';

export default function Form() {

return (
<div className="m-auto px-4 col-12 col-sm-10 col-lg-6">

<form className="mb-3">

<label htmlFor="todo" className="form-label mt-3">Chose à


faire</label>

<input type="text" className="form-control" id="todo" />

<button className="mt-2 btn btn-primary


d-block">Envoyer</button>
</form>

<h2>Liste des choses à faire</h2>

<ul className="list-group"></ul>

</div>
);

45
Au niveau de la page App.js :

import './App.css';
import
'../node_modules/bootstrap/dist/css/bootstrap.min.css';
import Form from './components/Form'

function App() {
return (
<div className="App">

<h1 className="textcenter mt3">ToDo-List</h1>

<Form/>

</div>
);
}

export default App;


46
Item.js
export default function Item() {
return (
<div>
<li className="border d-flex justify-content-between align-item-
center p-2 m-2">

<div className="p-3">txt</div>

<button className="btn btn-danger p-2 h-50">Supprimer</button>

</li>
</div>
)
}

47
import './App.css';
import
'../node_modules/bootstrap/dist/css/bootstrap.min.css';
import Form from './components/Form‘
import Item from './components/Item'

function App() {
return (
<div className="App">

<h1 className="textcenter mt3">ToDo-List</h1>

<Form/>

<Item/><Item/><Item/><Item/>

</div>
);
}
48
export default App;
Afficher la liste
Au niveau du component Form on va créer
la liste des taches sous forme de state

const [dataArr,setDataArr]=useState([
{txt:'Sport'},
{txt:'regarder Film'},
{txt:'Coder en React'}

])

49
Au niveau du component Item on va
ajouter des props
export default function Item(props) {
return (
<div>
<li className="border d-flex justify-content-between
align-item-center p-2 m-2">

<div className="p-3">{props.txt}</div>

<button className="btn btn-danger p-2 h-


50">Supprimer</button>

</li>
</div>
)
}

50
import {useState} from 'react';
import Item from './Item';
Iterating & Rendering with export default function Form() {
Loops in React components
const [dataArr,setDataArr]=useState([
(use map) {txt:'Sport'},
{txt:'regarder Film'},
{txt:'Coder en React'}

])

return (
<div className="m-auto px-4 col-12 col-sm-10 col-lg-6">
<form className="mb-3">
<label htmlFor="todo" className="form-label mt-3">Chose à
faire</label>
<input type="text" className="form-control" id="todo" />
<button className="mt-2 btn btn-primary
d-block">Envoyer</button>
Item Form </form>
<h2>Liste des choses à faire</h2>
<ul className="list-group">
{dataArr.map((item,index)=>{
return(

<Item
txt={item.txt}
key={index}

/>
)
})}

</ul>
</div>
);
}
51
ID et suppression
1- installer l’extension uuid : npm install uuid
Pour générer id

<Item
txt={item.txt}
key={index}

/>
2- import { v4 as uuidv4 } from 'uuid';

52
import {useState} from 'react';
import Item from './Item';
export default function Form() {

const [dataArr,setDataArr]=useState([
{txt:'Sport‘,id:uuidv4()},
{txt:'regarder Film‘, id:uuidv4()},
{txt:'Coder en React‘, id:uuidv4()}

])

return (
<div className="m-auto px-4 col-12 col-sm-10 col-lg-6">
<form className="mb-3">
<label htmlFor="todo" className="form-label mt-3">Chose à
faire</label>
<input type="text" className="form-control" id="todo" />
<button className="mt-2 btn btn-primary
d-block">Envoyer</button>
</form>
<h2>Liste des choses à faire</h2>
<ul className="list-group">
{dataArr.map(item=>{
return(

<Item
txt={item.txt}
key={item.id}

/>
)
})}

</ul>
</div>
);
}
53
Créer la fonction
deleteElement
Pour pouvoir appeler une méthode depuis
le component fils il faut déclarer la
méthode dans les props

54
import {useState} from 'react';
import Item from './Item';
import { v4 as uuidv4 } from 'uuid';
export default function Form() {

const [dataArr,setDataArr]=useState([
{txt:'Sport',id:uuidv4()},
{txt:'regarder Film',id:uuidv4()},
{txt:'Coder en React',id:uuidv4()}

])
import React from 'react'
const deleteelement=id=>{
console.log(id);
export default function Item(props) { }
return (
<div> return (
<li className="border d-flex justify-content-
,,,,,,,,,,,,,,,,,,,,,
between align-item-center p-2 m-2"> <h2>Liste des choses à faire</h2>

<div className="p-3">{props.txt}</div>
<ul className="list-group">
<button onClick={props.delFunc} className="btn btn- {
danger p-2 h-50">Supprimer</button> dataArr.map(item=>{
return(

</li> <Item
</div> txt={item.txt}
key={item.id}
) id={item.id}
} delFunc={()=>deleteelement(item.id)}
/>
)
})

</ul>
</div>
);
55 }
Supprimer l’element cliqué
On va utiliser la méthode filter du tableau
pour créer un nouveau tableau qui contient
tous les éléments du tableau dataArr sauf
celui cliqué

56
import {useState} from 'react';
import Item from './Item';
import { v4 as uuidv4 } from 'uuid';
export default function Form() {

const [dataArr,setDataArr]=useState([
{txt:'Sport',id:uuidv4()},
{txt:'regarder Film',id:uuidv4()},
{txt:'Coder en React',id:uuidv4()}

])

const deleteelement=id=>{
const nvtab=dataArr.filter(element=>{
return element.id!=id;

})

setDataArr(nvtab);
}

57
Ajouter une tache
const [stateInput, setStateInput] = useState();

const modifyinput = e => {


setStateInput(e);

const addTodo = e => {


e.preventDefault();
const newArr = [...dataArr]
const newTodo = {};
newTodo.txt = stateInput;
newTodo.id = uuidv4();
newArr.push(newTodo);
setDataArr(newArr);
setStateInput('')
58 }
<form onSubmit={e => addTodo(e)} className="mb-3">
<label htmlFor="todo" className="form-label mt-
3">Chose à faire</label>
<input
value={stateInput}
onChange={e => modifyinput(e.target.value)}
type="text"
className="form-control"
id="todo"/>
<button className="mt-2 btn btn-primary d-
block">Envoyer</button>
</form>

59
TP4 Multi step validation

60
Règles des Hooks
Utiliser dans le début des fonctions
(Component)

Utiliser dans des fonctions composants

Hooks cannot be conditional

61
Hook useEffect
Permet de surveiller un ou plusieurs states .

useEffect(()=>{

},[ ])

Tableau de states

62
import React, { useEffect, useState } from 'react'

export default function Form() {

Exemple : const [data1,setdata1]=useState(1);


const [data2,setdata2]=useState(1);

const update=()=>{

setdata1(data1+1);

}
useEffect(()=>{
console.log("Update state 1");

},[data1]

return (
<div>
<h1>{data1}</h1>

<h1>{data2}</h1>

<h2 onClick={update}>update </h2>

</div>
)
}

63
Si le tableau des states est vide , Le
traitement de useEffect sera exécuté une
seule fois

64
Exemple : Appel d’une API

https://api.thecatapi.com/v1/images/search

Tester avec Postman

65
function App() {

const [imgdata,setimgdata]=useState('');

useEffect(()=>{

fetch('https://api.thecatapi.com/v1/images/search').
then(response=>{
return(response.json())
}).
then(data=>{
//console.log(data[0].url)
setimgdata(data[0].url);

},[])

return (
<div className="App">
{imgdata && <img src={imgdata} style={{ width:"300px",height:"300px"}}
/>}
</div>
);
66 }
React fragment

return (
<>
<h1></h1>
<h1></h1>
<h1></h1>
,,,,,,,,,,,,

</>
);

67
Props.children

import React from 'react'

export default function Content(props) {


return (
<div className="content">
{props.children}
</div>
)
}

<Content>
<h1>Titre de mon article 1</h1>
<p>Lorem ipsum dolor sit amet.</p>
</Content>

68
Système de routes
React-router

69
Installation et première route
npm install react-router-dom

Au niveau de la page index.js:

import {BrowserRouter} from 'react-router-dom'

const root = ReactDOM.createRoot(document.getElementById('root'));


root.render(
<BrowserRouter>
<App />
</BrowserRouter>
);

70
Au niveau de la page app.js
import {Routes,Route} from 'react-router-dom'
import Home from './components/Home';
import Profil from './components/Profil';

function App() {
return (
<div className="App">
<Routes>
<Route path="/" element={<Home />} />
<Route path="/profil" element={<Profil />} />

</Routes>
</div>
);
}

export default App;

71
Navbar.js
import './Navbar.css'
import {Link} from 'react-router-dom'

export default function Navbar() {


return (

<div className="nav-top">
<Link to="/">ACCUEIL</Link>
<Link
to="/produits">PRODUITS</Link>
<Link to="/contact">CONTACT</Link>
</div>
)
}

72
Navbar.css
.nav-top {
margin: 75px auto 50px;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
max-width: 700px;
background: #333;
border-radius: 3px;
padding: 0px 20px;
box-shadow: 0 10px 20px rgba(19, 19, 19, 0.2);
}

.nav-top a {
font-size: 22px;
text-decoration: none;
color: #f1f1f1;
padding: 20px 20px;
73 }
API de context

74
API de context
Un statemanager : un outil pour gérer des
states (qui ne changent pas plusieurs fois
durant l’utilisation de l’application
exemple : darkmode/lightmode , changer la
langue, authentification)

75
Mise en place
Créer un dossier Components qui contient
deux dossier :

BtnToggle (BtnToggle.js et BtnToggle.css)

Content (Content.js et Content.css)

76
BtnToggle.js

import React from 'react'

export default function BtnToggle() {


return (

<button className="btn-
toggle">Toggle</button>

)
}

77
BtnToggle.css
.btn-toggle {
position: absolute;
top: 10px;
right: 10px;
border-radius: 50%;
width: 60px;
height: 60px;
display: flex;
justify-content: center;
align-items: center;
outline: none;
}

.dark-btn {
color: #fff;
background: #222;
}
78
Content.js

<div className="container">
<BtnToggle />
<h1>Lorem ipsum dolor sit
amet.</h1>
<p className="content-txt">
Lorem ipsum dolor sit amet </p>
</div>

79
Content.css

.container {
padding: 50px 10vw;
}
.content-txt {
text-align: justify;
}

.dark-body{
background: #222;
color: #f1f1f1;
}

80
Créer un context
Créer un context ThemeContext qui
contient un component avec des states à
partager

81
import React, {createContext, useState} from 'react';

export const ThemeContext = createContext();

const ThemeContextProvider = props => {

const [theme, setTheme] = useState('Hello Context')

const [theme2, setTheme2] = useState('Hello Context 2')


return (
<ThemeContext.Provider value={{theme,theme2}}>
{props.children}
</ThemeContext.Provider>
)

}
export default ThemeContextProvider;

82
Utilisation des states
import './App.css';
import Content from
'./Components/Content/Content'
import ThemeContextProvider from import {ThemeContext} from
'./Context/ThemeContext'; '../../Context/ThemeContext'

function App() { export default function Content() {


return (
<div className="App"> const {theme,theme2} =
<ThemeContextProvider> useContext(ThemeContext)
<Content />
</ThemeContextProvider> console.log(theme);
</div>
); console.log(theme2);
}

export default App;


83
Exemple : dark-mode
import React, {createContext, useState} from 'react';

export const ThemeContext = createContext();

const ThemeContextProvider = props => {

const [theme, setTheme] = useState(false)

const toggleTheme = () => {


setTheme(!theme)
}

if(theme){
document.body.classList.add('dark-body');
} else {
document.body.classList.remove('dark-body');
}

return (
<ThemeContext.Provider value={{toggleTheme, theme}}>
{props.children}
</ThemeContext.Provider>
)

}
export default ThemeContextProvider;
84
import React, {useContext} from 'react'
import './BtnToggle.css'
import {ThemeContext} from '../../Context/ThemeContext'

export default function BtnToggle() {

const {toggleTheme, theme} = useContext(ThemeContext)

return (
<button
onClick={toggleTheme}
className={theme ? "btn-toggle dark-btn " : "btn-toggle "}>
{theme ? "LIGHT" : "DARK"}
</button>
)
}

85
import React, {useContext} from 'react'
import BtnToggle from '../BtnToggle/BtnToggle'
import './Content.css'

import {ThemeContext} from '../../Context/ThemeContext'

export default function Content() {

const {theme} = useContext(ThemeContext)

console.log(theme);

return (
<div className="container" >
<BtnToggle />
<h1>Lorem ipsum dolor sit amet.</h1>

<p className="content-txt">

quidem impedit officiis dolorem sunt architecto deserunt ducimus quas facilis aliquid expedita quaerat provident nam
eligendi </p>
</div>
)
}

86
TP_5 multi langues

87
TP_6 Chartjs

88
89
C’est un gestionnaire de states

90
npm install redux

npm install react-redux

91
Créer un reducer

92
Au niveau de la page index.js
Créer un store qui contient un Reducer

93
Lecture du state useSelector

94
Utiliser le reducer pour changer le
state

95
Au niveau du component
(useDispatch)

96
Dispatch avec payload

97
Combiner plusieurs Reducers
Créer un fichier store.js

98
Au niveau de index.js

99
TP_Full Stack Shop

10
0
10
1
10
2

Vous aimerez peut-être aussi