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/16 02:40] – jcheron | web:framework:react [2024/04/10 09:40] (Version actuelle) – jcheron | ||
---|---|---|---|
Ligne 22: | Ligne 22: | ||
===== Composants ===== | ===== Composants ===== | ||
<WRAP info> | <WRAP info> | ||
- | En React, tout est composant, et les composants peuvent être créés à partir de fonctions, ou de classes. | + | En React, tout est composant, et les composants peuvent être créés à partir de fonctions |
</ | </ | ||
==== Fonctions ==== | ==== Fonctions ==== | ||
Ligne 69: | Ligne 69: | ||
La classe Hello déclare explicitement une propriété de nom **message** de type **string**. | La classe Hello déclare explicitement une propriété de nom **message** de type **string**. | ||
- | === Utilisation === | + | ==== Utilisation |
Utilisation de **Hello** dans l' | Utilisation de **Hello** dans l' | ||
Ligne 87: | Ligne 87: | ||
</ | </ | ||
+ | ===== Props et state ===== | ||
+ | Sur un composant React : | ||
+ | * Les propriétés sont accessibles avec l' | ||
+ | * Ces propriétés sont initialisées en JSX/HTML via les attributs de l' | ||
+ | * Elles sont immutables (en lecture seule). | ||
+ | * Il est nécessaire d' | ||
+ | |||
+ | ==== Exemple classe TypeScript ==== | ||
+ | |||
+ | <sxh javascript; | ||
+ | import React from " | ||
+ | |||
+ | export default class Hello extends React.Component< | ||
+ | constructor(props: | ||
+ | super(props); | ||
+ | this.state = {msg: props.message}; | ||
+ | } | ||
+ | handleChange = (event: React.ChangeEvent< | ||
+ | this.setState({msg: | ||
+ | } | ||
+ | render() { | ||
+ | return ( | ||
+ | <> | ||
+ | < | ||
+ | <input value={this.state.msg} onChange={this.handleChange}/> | ||
+ | < /> | ||
+ | ); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Exemple fonction JavaScript ==== | ||
+ | |||
+ | <sxh javascript; | ||
+ | import {useState} from " | ||
+ | |||
+ | export default function Hola(props){ | ||
+ | const [message, setMessage] = useState(props.message); | ||
+ | const handleChange = (e) => { | ||
+ | setMessage(e.target.value); | ||
+ | } | ||
+ | return ( | ||
+ | <> | ||
+ | < | ||
+ | <input type=" | ||
+ | < /> | ||
+ | ); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Http Wrapper ==== | ||
+ | |||
+ | <sxh javascript> | ||
+ | // This is a wrapper for the fetch API | ||
+ | export default class AppHttp { | ||
+ | static async get(url, options) { | ||
+ | const response = await fetch(url, options); | ||
+ | return await response.json(); | ||
+ | } | ||
+ | static async post(url, body, options) { | ||
+ | const response = await fetch(url, { | ||
+ | method: ' | ||
+ | body: JSON.stringify(body), | ||
+ | ...options | ||
+ | }); | ||
+ | return await response.json(); | ||
+ | } | ||
+ | static async put(url, body, options) { | ||
+ | const response = await fetch(url, { | ||
+ | method: ' | ||
+ | body: JSON.stringify(body), | ||
+ | ...options | ||
+ | }); | ||
+ | return await response.json(); | ||
+ | } | ||
+ | static async delete(url, options) { | ||
+ | const response = await fetch(url, { | ||
+ | method: ' | ||
+ | ...options | ||
+ | }); | ||
+ | return await response.json(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== 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; | ||
+ | }; | ||
+ | </ | ||
+ | |||
+ | ===== Composants ===== | ||
+ | * [[https:// | ||
+ | * [[https:// | ||