=========
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