Placez chaque état dans l'ancêtre commun le plus proche pour partager une donnée entre plusieurs composants sans la dupliquer.
Ouvrir cette leçon dans KodokonDeux composants frères doivent afficher la même donnée : un champ de recherche et la liste qu'il filtre, par exemple. Un état local dans chacun ne peut pas fonctionner, car ils ne se voient pas. La solution est de faire remonter l'état dans leur ancêtre commun le plus proche : le parent détient la donnée et la redistribue par les props.
import { useState } from "react";
function ProductPage({ products }) {
const [query, setQuery] = useState("");
return (
<>
<SearchBar query={query} onChange={setQuery} />
<ProductList products={products} query={query} />
</>
);
}Les enfants deviennent alors des composants pilotés : ils reçoivent la valeur en lecture et, pour la modifier, appellent la fonction de rappel fournie par le parent. Les données descendent par les props, les demandes de changement remontent par les fonctions. Ce flux à sens unique rend le comportement de l'application facile à suivre.
function SearchBar({ query, onChange }) {
return (
<input
value={query}
onChange={(e) => onChange(e.target.value)}
placeholder="Rechercher un produit"
/>
);
}
function ProductList({ products, query }) {
const visible = products.filter((p) =>
p.name.toLowerCase().includes(query.toLowerCase())
);
return (
<ul>
{visible.map((p) => <li key={p.id}>{p.name}</li>)}
</ul>
);
}Chaque donnée doit avoir une source de vérité unique. Si deux composants stockent chacun leur copie du même état, elles finiront par diverger : l'une sera mise à jour, l'autre non, et l'interface deviendra incohérente. Faire remonter l'état supprime ce risque. Quand la donnée doit traverser de nombreux niveaux, la composition (leçon suivante) puis le contexte allègent le passage de props.