Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| web:framework:react [2023/03/20 08:06] – jcheron | web:framework:react [2025/08/12 02:35] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 171: | Ligne 171: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | ==== Contexte ==== | ||
| + | |||
| + | <sxh ts> | ||
| + | 'use client'; | ||
| + | import React, {createContext, | ||
| + | |||
| + | |||
| + | interface DemoContextType { | ||
| + | data: number; | ||
| + | setData: (d: | ||
| + | } | ||
| + | |||
| + | const DemoContext = createContext< | ||
| + | |||
| + | export const demoProvider: | ||
| + | const [data, setData] = useState< | ||
| + | |||
| + | return ( | ||
| + | < | ||
| + | {children} | ||
| + | </ | ||
| + | ); | ||
| + | }; | ||
| + | |||
| + | export const useDemo = (): DemoContextType => { | ||
| + | const context = useContext(demoContext); | ||
| + | if (!context) { | ||
| + | throw new Error(' | ||
| + | } | ||
| + | return context; | ||
| + | }; | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Hooks React ===== | ||
| + | Les hooks React sont des fonctions introduites à partir de React 16.8 permettant d' | ||
| + | |||
| + | ==== Hooks de base ==== | ||
| + | |||
| + | ===== useState ===== | ||
| + | |||
| + | Permet de gérer un état local dans un composant fonctionnel. | ||
| + | |||
| + | <sxh js> | ||
| + | import { useState } from " | ||
| + | |||
| + | function Counter() { | ||
| + | const [count, setCount] = useState(0); | ||
| + | |||
| + | return ( | ||
| + | <button onClick={() => setCount(count + 1)}> | ||
| + | ); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== useEffect ===== | ||
| + | |||
| + | |||
| + | Permet d' | ||
| + | Exemples : | ||
| + | * appels API, | ||
| + | * écouteurs d’événements, | ||
| + | * manipulation du DOM... | ||
| + | |||
| + | <sxh js> | ||
| + | import { useState, useEffect } from " | ||
| + | |||
| + | function Timer() { | ||
| + | const [seconds, setSeconds] = useState(0); | ||
| + | |||
| + | useEffect(() => { | ||
| + | const interval = setInterval(() => { | ||
| + | setSeconds(s => s + 1); | ||
| + | }, 1000); | ||
| + | |||
| + | return () => clearInterval(interval); | ||
| + | }, []); // Dépendances vides = effet exécuté une seule fois au montage | ||
| + | |||
| + | return < | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== useContext ===== | ||
| + | |||
| + | Permet d' | ||
| + | |||
| + | <sxh js> | ||
| + | import { useContext, createContext } from " | ||
| + | |||
| + | const ThemeContext = createContext(" | ||
| + | |||
| + | function ThemedButton() { | ||
| + | const theme = useContext(ThemeContext); | ||
| + | |||
| + | return <button style={{ background: theme === " | ||
| + | Thème : {theme} | ||
| + | </ | ||
| + | } | ||
| + | </ | ||
| + | ===== Composants ===== | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||