========= Composant ========= .. index:: single: Composants single: React; Composants .. contents:: :depth: 3 :backlinks: top .. toctree:: :maxdepth: 2 Fragment/Fragment Navbar/Navbar #### ---------------------- Les types de component ---------------------- Il existe 2 types de composants. Les fonctions (appellées **fonctions composants**) et les classes. Une **fonction composant** est une fonction Javascript qui n'accepte qu'un seul argument appellé **props** qui signifie "propriétés". Il peut ne pas y avoir de props. Ce composant doit obligatoirement retourner quelque chose .. code:: JavaScript :number-lines: :force: // fonction composant import React from 'react' function Welcome(props){ return

Bonjour, {props.name}

; } } On peut également utiliser une classe ES6 pour définir un composant. .. code:: JavaScript :number-lines: :force: // class import React from 'react' class Welcome extends React.Component{ render() { return

Bonjour, {this.props.name}

; } } // Alternative : import de React.Component à l'aide du destructuring import React, { Component } from 'react' class Welcome extends Component { render() { return

Bonjour, {this.props.name}

; } } Ces 2 composants (la fonction et la classe) sont équivalents. Une classe doit systématiquement avor une méthode **"render(){return()}"** c'est cette méthode qui modifie le DOM virtuel. Une fonction doit, systématiquement avoir un "return". Choix d'un composant ? Fonction : Classe ======================================== Depuis la version 16.8.0 de React et l'introduction des hooks, l'utilisation des Fonctions composants est privilégiée par rapport aux Classes. La philisophie de React est d'avoir des composants le plus simples possible pour pouvoir les réutiliser plus facillement. Les fonctions sont donc à privilégier le plus souvent possible. Convention de nommage des Composants ==================================== Pour permettre à JSX d'identifier et d'interpréter les composants que nous créons, ils faut que la première lettre du composant soit en majuscule. #### -------------------------------------------------- Rendu d’un composant : Comment lier React au DOM ? -------------------------------------------------- Pour lier une application au DOM, il faut utiliser le package ReactDOM et la fonction render avec en paramètres, le composant racine de l'application et le noeud du DOM auquel il sera attaché. .. code:: JavaScript :number-lines: :force: ReactDOM.render( , docment.getElementById('root') ); Les éléments peuvent soit représenter un éléments du DOM : .. code:: JavaScript :number-lines: :force: const element =
; soit représenter un élément définis par l'utilisateur : .. code:: JavaScript :number-lines: :force: const element = ; Lorsque React rencontre un élément représentant un composant défini par l’utilisateur, il transmet les attributs JSX à ce composant sous la forme d’un objet unique. Nous appelons cet objet **"props"**. **Le rendu** se fait en appellant **ReactDOM.render()**. .. code:: JavaScript :number-lines: :force: function Welcome(props){ return

Bonjour, {props.name}

; } const element = ; ReactDOM.render( element, document.getElementById('root') ); Détail du déroulement de l'exemple précedent : #. On appelle **ReactDOM.render()** avec l’élément créer par . #. React appelle le composant Welcome avec comme props {name: 'Sara'}. #. Notre composant Welcome retourne un élément

Bonjour, Sara

pour résultat. #. React DOM met à jour efficacement le DOM pour correspondre à

Bonjour, Sara

. Parcourrir un tableau et l'afficher sous forme de liste ======================================================= .. code:: JavaScript :number-lines: :force: {/* JavaScript Object */} var d= {elm1: "Je s'appelle Groot !", elm2: "Je s'appelle Pierre !", eml3: "Je s'appelle atarte"} {/* Creation of an array from keys of the "d" object */} var dKeys = Object.keys(d) console.log("dKey : ", dKeys) {/* Browsing the "dkeys" array with the map function. The map function use a callback function. Each item (dkey) is given as the unique key ID : ("item", "unique key")=>{...} */} var ul = React.createElement("ul", null, dKeys.map( (dKey, dkey)=>{ return ( React.createElement("li", null, d[dKey]) ) } ) ) console.log(ul) {/* the "ul" function is given to the render */} ReactDOM.render(ul, document.getElementById("app")) #### ------------------------------------------------------------ Amélioration sémantique du HTML dans le rendu des composants ------------------------------------------------------------ :Liens_Web: * `A little semantic HTML trick for React components`_ * `Les éléments sémantiques HTML5`_ .. _`A little semantic HTML trick for React components`: https://queen.raae.codes/emails/2022-10-10-semantic-react/ .. _`Les éléments sémantiques HTML5`: https://fr.w3docs.com/apprendre-html/les-elements-semantiques-html5.html Les éléments sémantiques sont une des innovations significatives en HTML5. Avant leur apparition, toutes les balises des pages Web étaient créées à l'aide des éléments
, auxquels étaient attribués des identificateurs (id) ou des classes (class). Pour placer des panneaux latéraux, des en-têtes, des pieds de page, des éléments de navigation et d'autres blocs de construction, des blocs div avec les valeurs appropriées (par exemple, div = "footer") ont été utilisés. HTML5 introduit de nouveaux éléments sémantiques pour la structuration, le regroupement du contenu et le balisage du contenu du texte. Ils décrivent clairement quel contenu ils ont (il y avait