« Max reacjsex » : différence entre les versions
| (9 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
Pour organiser l’arborescence des fichiers JSX et les imports dans une application React, il est important de structurer les fichiers de manière logique et modulaire. Voici une suggestion d’organisation sous forme de tableau, ainsi qu’une indication sur la manière de gérer les imports. | Pour organiser l’arborescence des fichiers JSX et les imports dans une application React, il est important de structurer les fichiers de manière logique et modulaire. Voici une suggestion d’organisation sous forme de tableau, ainsi qu’une indication sur la manière de gérer les imports. | ||
== '''1.Exemple''' == | |||
<span id="arborescence-des-fichiers-jsx"></span> | <span id="arborescence-des-fichiers-jsx"></span> | ||
=== Arborescence des fichiers JSX === | === Arborescence des fichiers JSX === | ||
| Ligne 90 : | Ligne 90 : | ||
<span id="exemple-de-srccomponentszonetexte.jsx"></span> | <span id="exemple-de-srccomponentszonetexte.jsx"></span> | ||
=== | === <code>/src/components/ZoneTexte.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 100 : | Ligne 100 : | ||
export default ZoneTexte;</syntaxhighlight> | export default ZoneTexte;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentszonenumerique.jsx"></span> | <span id="exemple-de-srccomponentszonenumerique.jsx"></span> | ||
=== | === <code>/src/components/ZoneNumerique.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 110 : | Ligne 110 : | ||
export default ZoneNumerique;</syntaxhighlight> | export default ZoneNumerique;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentsbouton.jsx"></span> | <span id="exemple-de-srccomponentsbouton.jsx"></span> | ||
=== | === <code>/src/components/Bouton.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 124 : | Ligne 124 : | ||
export default Bouton;</syntaxhighlight> | export default Bouton;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentscoordxy.jsx"></span> | <span id="exemple-de-srccomponentscoordxy.jsx"></span> | ||
=== | === <code>/src/components/CoordXY.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 140 : | Ligne 140 : | ||
export default CoordXY;</syntaxhighlight> | export default CoordXY;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentsgeoloc.jsx"></span> | <span id="exemple-de-srccomponentsgeoloc.jsx"></span> | ||
=== | === <code>/src/components/Geoloc.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React, { useState } from 'react'; | <syntaxhighlight lang="jsx" line copy>import React, { useState } from 'react'; | ||
| Ligne 166 : | Ligne 166 : | ||
export default Geoloc;</syntaxhighlight> | export default Geoloc;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentsetage.jsx"></span> | <span id="exemple-de-srccomponentsetage.jsx"></span> | ||
=== | === <code>/src/components/Etage.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 177 : | Ligne 177 : | ||
export default Etage;</syntaxhighlight> | export default Etage;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentscodeacces.jsx"></span> | <span id="exemple-de-srccomponentscodeacces.jsx"></span> | ||
=== | === <code>/src/components/CodeAcces.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 188 : | Ligne 188 : | ||
export default CodeAcces;</syntaxhighlight> | export default CodeAcces;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentscodepos.jsx"></span> | <span id="exemple-de-srccomponentscodepos.jsx"></span> | ||
=== | === <code>/src/components/CodePos.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 199 : | Ligne 199 : | ||
export default CodePos;</syntaxhighlight> | export default CodePos;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentsville.jsx"></span> | <span id="exemple-de-srccomponentsville.jsx"></span> | ||
=== | === <code>/src/components/Ville.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 210 : | Ligne 210 : | ||
export default Ville;</syntaxhighlight> | export default Ville;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentsadresse.jsx"></span> | <span id="exemple-de-srccomponentsadresse.jsx"></span> | ||
=== | === <code>/src/components/Adresse.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React, { useState } from 'react'; | <syntaxhighlight lang="jsx" line copy>import React, { useState } from 'react'; | ||
| Ligne 247 : | Ligne 247 : | ||
<span id="exemple-de-srccomponentszone.jsx"></span> | <span id="exemple-de-srccomponentszone.jsx"></span> | ||
=== | === <code>/src/components/Zone.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 275 : | Ligne 275 : | ||
export default Zone;</syntaxhighlight> | export default Zone;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentsruetourep.jsx"></span> | <span id="exemple-de-srccomponentsruetourep.jsx"></span> | ||
=== | === <code>/src/components/RueToureP.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 286 : | Ligne 286 : | ||
export default RueToureP;</syntaxhighlight> | export default RueToureP;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentstou.jsx"></span> | <span id="exemple-de-srccomponentstou.jsx"></span> | ||
=== | === <code>/src/components/Tou.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 297 : | Ligne 297 : | ||
export default Tou;</syntaxhighlight> | export default Tou;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentsrep.jsx"></span> | <span id="exemple-de-srccomponentsrep.jsx"></span> | ||
=== | === <code>/src/components/Rep.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 308 : | Ligne 308 : | ||
export default Rep;</syntaxhighlight> | export default Rep;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentsetablissement.jsx"></span> | <span id="exemple-de-srccomponentsetablissement.jsx"></span> | ||
=== | === <code>/src/components/Etablissement.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 319 : | Ligne 319 : | ||
export default Etablissement;</syntaxhighlight> | export default Etablissement;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentsformadresse.jsx"></span> | <span id="exemple-de-srccomponentsformadresse.jsx"></span> | ||
=== | === <code>/src/components/FormAdresse.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 334 : | Ligne 334 : | ||
export default FormAdresse;</syntaxhighlight> | export default FormAdresse;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentspage.jsx"></span> | <span id="exemple-de-srccomponentspage.jsx"></span> | ||
=== | === <code>/src/components/Page.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 356 : | Ligne 356 : | ||
export default Page;</syntaxhighlight> | export default Page;</syntaxhighlight> | ||
<span id="exemple-de-srccomponentsapplication.jsx"></span> | <span id="exemple-de-srccomponentsapplication.jsx"></span> | ||
=== | === <code>/src/components/Application.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 371 : | Ligne 371 : | ||
export default Application;</syntaxhighlight> | export default Application;</syntaxhighlight> | ||
<span id="exemple-de-srcapp.jsx"></span> | <span id="exemple-de-srcapp.jsx"></span> | ||
=== | === <code>/src/App.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 386 : | Ligne 386 : | ||
export default App;</syntaxhighlight> | export default App;</syntaxhighlight> | ||
<span id="exemple-de-srcindex.jsx"></span> | <span id="exemple-de-srcindex.jsx"></span> | ||
=== | === <code>/src/index.jsx</code> === | ||
<syntaxhighlight lang="jsx" line copy>import React from 'react'; | <syntaxhighlight lang="jsx" line copy>import React from 'react'; | ||
| Ligne 400 : | Ligne 400 : | ||
Cette structure vous permet de gérer l’état local de chaque composant et de conditionner l’affichage de la ville en fonction de la saisie du code postal. Chaque composant est responsable de sa propre logique et de son rendu, ce qui facilite la maintenance et l’évolution de l’application. | Cette structure vous permet de gérer l’état local de chaque composant et de conditionner l’affichage de la ville en fonction de la saisie du code postal. Chaque composant est responsable de sa propre logique et de son rendu, ce qui facilite la maintenance et l’évolution de l’application. | ||
== | == '''2.Exemple Ville from CodPos''' == | ||
Pour créer un composant <code>Ville</code> qui affiche une liste de villes provenant d’une API fictive et qui se base sur le <code>codePos</code> pour sélectionner la bonne ville, nous allons suivre les étapes suivantes : | Pour créer un composant <code>Ville</code> qui affiche une liste de villes provenant d’une API fictive et qui se base sur le <code>codePos</code> pour sélectionner la bonne ville, nous allons suivre les étapes suivantes : | ||
| Ligne 411 : | Ligne 411 : | ||
<span id="simulation-de-lapi"></span> | <span id="simulation-de-lapi"></span> | ||
=== Simulation de l’API === | === Simulation de l’API === | ||
| Ligne 517 : | Ligne 518 : | ||
[[Category: | == Vidéos == | ||
[https://www.youtube.com/watch?v=1p6TsZW_HDk C'est quoi react (Youtube)] | |||
[[Category:React]] | |||
Dernière version du 4 juin 2025 à 23:08
Pour organiser l’arborescence des fichiers JSX et les imports dans une application React, il est important de structurer les fichiers de manière logique et modulaire. Voici une suggestion d’organisation sous forme de tableau, ainsi qu’une indication sur la manière de gérer les imports.
1.Exemple
Arborescence des fichiers JSX
| Chemin du fichier | Description |
|---|---|
/src/index.jsx
|
Point d’entrée principal de l’application. |
/src/App.jsx
|
Composant principal de l’application. |
/src/components/Application.jsx
|
Composant racine de l’application. |
/src/components/Page.jsx
|
Composant de la page principale. |
/src/components/FormAdresse.jsx
|
Composant du formulaire d’adresse. |
/src/components/Adresse.jsx
|
Composant d’adresse. |
/src/components/AttributAdresse.jsx
|
Composant pour les attributs de l’adresse. |
/src/components/Etage.jsx
|
Composant pour l’étage. |
/src/components/CodeAcces.jsx
|
Composant pour le code d’accès. |
/src/components/CodePos.jsx
|
Composant pour le code postal. |
/src/components/Ville.jsx
|
Composant pour la ville. |
/src/components/Zone.jsx
|
Composant pour la zone. |
/src/components/RueToureP.jsx
|
Composant pour la rue/tour/étage. |
/src/components/Tou.jsx
|
Composant pour le numéro de tour. |
/src/components/Rep.jsx
|
Composant pour le numéro de répétition. |
/src/components/Etablissement.jsx
|
Composant pour l’établissement. |
/src/components/Geoloc.jsx
|
Composant pour la géolocalisation. |
/src/components/CoordXY.jsx
|
Composant pour les coordonnées XY. |
/src/components/ZoneTexte.jsx
|
Composant pour les zones de texte. |
/src/components/ZoneNumerique.jsx
|
Composant pour les zones numériques. |
/src/components/Bouton.jsx
|
Composant pour les boutons. |
Gestion des imports
Pour les imports, chaque fichier JSX importera les composants et les dépendances nécessaires. Voici comment vous pourriez structurer les imports dans chaque fichier :
Points clés
- Modularité : Chaque composant est dans son propre fichier, ce qui facilite la maintenance et la réutilisation.
- Imports relatifs : Utilisez des chemins relatifs pour importer des composants dans d’autres fichiers.
- Structure claire : Une arborescence bien définie aide à comprendre rapidement où se trouvent les différents composants.
Cette structure vous permet de garder votre code bien organisé et facile à naviguer.
Pour ajouter la logique de chaque composant tout en respectant la condition selon laquelle la ville est affichée uniquement si un code postal est saisi, nous allons utiliser le hook useState pour gérer l’état local de chaque composant. Voici comment vous pourriez structurer chaque fichier avec sa logique respective :
/src/components/ZoneTexte.jsx
import React from 'react';
const ZoneTexte = ({ value, onChange }) => {
return <input type="text" value={value} onChange={onChange} />;
};
export default ZoneTexte;
/src/components/ZoneNumerique.jsx
import React from 'react';
const ZoneNumerique = ({ value, onChange }) => {
return <input type="number" value={value} onChange={onChange} />;
};
export default ZoneNumerique;
/src/components/Bouton.jsx
import React from 'react';
const Bouton = ({ valeur, etat, onClick }) => {
return (
<button onClick={onClick} disabled={etat === 'désactivé'}>
{valeur}
</button>
);
};
export default Bouton;
/src/components/CoordXY.jsx
import React from 'react';
import ZoneTexte from './ZoneTexte';
const CoordXY = ({ x, y, onXChange, onYChange }) => {
return (
<div>
<ZoneTexte value={x} onChange={onXChange} />
<ZoneTexte value={y} onChange={onYChange} />
</div>
);
};
export default CoordXY;
/src/components/Geoloc.jsx
import React, { useState } from 'react';
import CoordXY from './CoordXY';
const Geoloc = () => {
const [x, setX] = useState('');
const [y, setY] = useState('');
const handleXChange = (e) => setX(e.target.value);
const handleYChange = (e) => setY(e.target.value);
return (
<div>
<CoordXY
x={x}
y={y}
onXChange={handleXChange}
onYChange={handleYChange}
/>
</div>
);
};
export default Geoloc;
/src/components/Etage.jsx
import React from 'react';
import ZoneTexte from './ZoneTexte';
const Etage = ({ value, onChange }) => {
return <ZoneTexte value={value} onChange={onChange} />;
};
export default Etage;
/src/components/CodeAcces.jsx
import React from 'react';
import ZoneNumerique from './ZoneNumerique';
const CodeAcces = ({ value, onChange }) => {
return <ZoneNumerique value={value} onChange={onChange} />;
};
export default CodeAcces;
/src/components/CodePos.jsx
import React from 'react';
import ZoneNumerique from './ZoneNumerique';
const CodePos = ({ value, onChange }) => {
return <ZoneNumerique value={value} onChange={onChange} />;
};
export default CodePos;
/src/components/Ville.jsx
import React from 'react';
import ZoneTexte from './ZoneTexte';
const Ville = ({ value, onChange }) => {
return <ZoneTexte value={value} onChange={onChange} />;
};
export default Ville;
/src/components/Adresse.jsx
import React, { useState } from 'react';
import Etage from './Etage';
import CodeAcces from './CodeAcces';
import CodePos from './CodePos';
import Ville from './Ville';
import Zone from './Zone';
const Adresse = () => {
const [etage, setEtage] = useState('');
const [codeAcces, setCodeAcces] = useState('');
const [codePos, setCodePos] = useState('');
const [ville, setVille] = useState('');
return (
<div>
<Etage value={etage} onChange={(e) => setEtage(e.target.value)} />
<CodeAcces value={codeAcces} onChange={(e) => setCodeAcces(e.target.value)} />
<CodePos value={codePos} onChange={(e) => setCodePos(e.target.value)} />
{codePos && <Ville value={ville} onChange={(e) => setVille(e.target.value)} />}
<Zone />
</div>
);
};
export default Adresse;
Explication
- Condition
{codePos && <Ville ... />}: Cette ligne signifie que le composantVillene sera rendu que sicodePosa une valeur non vide. SicodePosest une chaîne vide (), alors le composantVillene sera pas affiché. - Gestion de l’État : Lorsque l’utilisateur saisit quelque chose dans le champ
CodePos, l’étatcodePosest mis à jour, ce qui déclenche un re-rendu du composantAdresse. SicodePosa une valeur, le composantVilleest alors affiché.
Cette approche permet de s’assurer que le champ de la ville n’est visible que lorsque l’utilisateur a saisi un code postal, ce qui peut être utile pour des raisons de logique métier ou d’expérience utilisateur.
/src/components/Zone.jsx
import React from 'react';
import RueToureP from './RueToureP';
import Tou from './Tou';
import Rep from './Rep';
import Etablissement from './Etablissement';
import Geoloc from './Geoloc';
const Zone = () => {
const [rueToureP, setRueToureP] = React.useState('');
const [tou, setTou] = React.useState('');
const [rep, setRep] = React.useState('');
const [etablissement, setEtablissement] = React.useState('');
return (
<div>
<RueToureP value={rueToureP} onChange={(e) => setRueToureP(e.target.value)} />
<Tou value={tou} onChange={(e) => setTou(e.target.value)} />
<Rep value={rep} onChange={(e) => setRep(e.target.value)} />
<Etablissement value={etablissement} onChange={(e) => setEtablissement(e.target.value)} />
<Geoloc />
</div>
);
};
export default Zone;
/src/components/RueToureP.jsx
import React from 'react';
import ZoneNumerique from './ZoneNumerique';
const RueToureP = ({ value, onChange }) => {
return <ZoneNumerique value={value} onChange={onChange} />;
};
export default RueToureP;
/src/components/Tou.jsx
import React from 'react';
import ZoneNumerique from './ZoneNumerique';
const Tou = ({ value, onChange }) => {
return <ZoneNumerique value={value} onChange={onChange} />;
};
export default Tou;
/src/components/Rep.jsx
import React from 'react';
import ZoneNumerique from './ZoneNumerique';
const Rep = ({ value, onChange }) => {
return <ZoneNumerique value={value} onChange={onChange} />;
};
export default Rep;
/src/components/Etablissement.jsx
import React from 'react';
import ZoneNumerique from './ZoneNumerique';
const Etablissement = ({ value, onChange }) => {
return <ZoneNumerique value={value} onChange={onChange} />;
};
export default Etablissement;
/src/components/FormAdresse.jsx
import React from 'react';
import Adresse from './Adresse';
const FormAdresse = () => {
return (
<div>
<Adresse />
</div>
);
};
export default FormAdresse;
/src/components/Page.jsx
import React from 'react';
import FormAdresse from './FormAdresse';
import Bouton from './Bouton';
const Page = () => {
const handleSave = () => {
// Logique pour enregistrer les données
console.log('Enregistrement des données');
};
return (
<div>
<FormAdresse />
<Bouton valeur="Enregistrer" etat="activer" onClick={handleSave} />
</div>
);
};
export default Page;
/src/components/Application.jsx
import React from 'react';
import Page from './Page';
const Application = () => {
return (
<div>
<Page />
</div>
);
};
export default Application;
/src/App.jsx
import React from 'react';
import Application from './components/Application';
const App = () => {
return (
<div className="App">
<Application />
</div>
);
};
export default App;
/src/index.jsx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
Cette structure vous permet de gérer l’état local de chaque composant et de conditionner l’affichage de la ville en fonction de la saisie du code postal. Chaque composant est responsable de sa propre logique et de son rendu, ce qui facilite la maintenance et l’évolution de l’application.
2.Exemple Ville from CodPos
Pour créer un composant Ville qui affiche une liste de villes provenant d’une API fictive et qui se base sur le codePos pour sélectionner la bonne ville, nous allons suivre les étapes suivantes :
- Simuler une API : Nous allons simuler une API qui renvoie une liste de villes en fonction du
codePos. - Composant
Ville: Ce composant va récupérer les villes en fonction ducodePoset afficher une liste déroulante (select) des villes correspondantes. - Mécanisme de Sélection : Lorsque le
codePoschange, le composantVilleva mettre à jour la liste des villes.
Voici comment vous pourriez structurer cela :
Simulation de l’API
Nous allons créer une fonction qui simule un appel API pour récupérer les villes en fonction du codePos.
// Simuler un appel API
const fetchVillesByCodePos = async (codePos) => {
// Simuler des données fictives
const villesData = {
'75001': ['Paris 1'],
'75002': ['Paris 2'],
'69001': ['Lyon 1'],
'69002': ['Lyon 2'],
// Ajoutez d'autres codes postaux et villes fictives ici
};
// Simuler un délai de réponse de l'API
return new Promise((resolve) => {
setTimeout(() => {
resolve(villesData[codePos] || []);
}, 500);
});
};
Composant Ville
Le composant Ville va utiliser le hook useEffect pour appeler la fonction fetchVillesByCodePos chaque fois que le codePos change.
import React, { useState, useEffect } from 'react';
const Ville = ({ codePos }) => {
const [villes, setVilles] = useState([]);
const [selectedVille, setSelectedVille] = useState('');
useEffect(() => {
const fetchVilles = async () => {
if (codePos) {
const villes = await fetchVillesByCodePos(codePos);
setVilles(villes);
setSelectedVille(villes[0] || '');
}
};
fetchVilles();
}, [codePos]);
const handleVilleChange = (e) => {
setSelectedVille(e.target.value);
};
return (
<div>
{villes.length > 0 ? (
<select value={selectedVille} onChange={handleVilleChange}>
{villes.map((ville, index) => (
<option key={index} value={ville}>
{ville}
</option>
))}
</select>
) : (
<p>Aucune ville trouvée pour ce code postal.</p>
)}
</div>
);
};
export default Ville;
Intégration dans le Composant Adresse
Enfin, nous allons intégrer le composant Ville dans le composant Adresse et passer le codePos comme prop.
import React, { useState } from 'react';
import Etage from './Etage';
import CodeAcces from './CodeAcces';
import CodePos from './CodePos';
import Ville from './Ville';
import Zone from './Zone';
const Adresse = () => {
const [etage, setEtage] = useState('');
const [codeAcces, setCodeAcces] = useState('');
const [codePos, setCodePos] = useState('');
return (
<div>
<Etage value={etage} onChange={(e) => setEtage(e.target.value)} />
<CodeAcces value={codeAcces} onChange={(e) => setCodeAcces(e.target.value)} />
<CodePos value={codePos} onChange={(e) => setCodePos(e.target.value)} />
{codePos && <Ville codePos={codePos} />}
<Zone />
</div>
);
};
export default Adresse;
Explication
- Appel API Simulé : La fonction
fetchVillesByCodePossimule un appel API et renvoie une liste de villes en fonction ducodePos. - Hook
useEffect: Le composantVilleutiliseuseEffectpour appeler la fonctionfetchVillesByCodePoschaque fois que lecodePoschange. - Liste Déroulante : Le composant
Villeaffiche une liste déroulante (select) des villes correspondantes aucodePos. Si aucune ville n’est trouvée, un message est affiché.
Cette approche permet de sélectionner dynamiquement les villes en fonction du code postal saisi par l’utilisateur.