Passer au contenu principal

Communiquer entre composants en React

Un composant prend en paramètre des propriétés qui permettent au parent de descendre l’information, et des gestionnaires d’événements qui permettent aux enfants de remonter l’information lorsque des événements se produisent.

Descendre les informations du composant React parent au composant enfant

export default function App() {
  return (
    <>
      <Title color="#000000">Hello world</Title>
    </>
  );
}

function Title(props) {
  console.log(props);
}

L’élément enfant reçoit un paramètre props contenant toutes les données transférées du parent.

Dans cet exemple, props retournera {color: '#000000', children: 'Hello world'}.

La propriété children est transférée lorsqu'il s’agit d’une balise qui n’est pas auto-fermante, c’est-à-dire <Title></Title> au lieu de <Title />.

Pour extraire uniquement les valeurs qui vous intéressent :

export default function App() {
  return (
    <>
      <Title color="red" />
    </>
  );
}

function Title({ color }) {
  return <h1 style={{ color: color }}>Hello world</h1>;
}

Gestion des attributs sans valeur explicite :

Lorsque qu'un attribut ne possède pas de valeur explicite, comme dans <Title checked />, cela indique que l'attribut checked est présent sans valeur assignée.

En JavaScript, cela est interprété comme true. Ainsi, dans le composant enfant, la propriété checked sera égale à true si l'attribut est présent, et à undefined s'il ne l'est pas.

Remonter les informations du composant React enfant au composant parent

import { useState } from "react";

function CGUCheckbox({ checked, onCheck }) {
  return (
    <div>
      <input
        type="checkbox"
        checked={checked}
        onChange={(e) => onCheck(e.target.checked)}
      />
      <label>Accepter les conditions générales</label>
    </div>
  );
}

export default function App() {
  const [isCGUAccepted, setIsCGUAccepted] = useState(false);

  return (
    <>
      <CGUCheckbox checked={isCGUAccepted} onCheck={setIsCGUAccepted} />
    </>
  );
}

Lorsque la checkbox est cochée, onCheck est appelé avec une valeur true ou false en fonction de e.target.checked.

onCheck est lié à setIsCGUAccepted, permettant ainsi au composant enfant de modifier l’état du composant parent.