0% ont trouvé ce document utile (0 vote)
49 vues6 pages

Devoir Surveillé

Le document décrit le développement d'une application de vente en ligne pour des PC portables et des réfrigérateurs, utilisant ReactJS, vite et Bootstrap. Il détaille la création de composants tels que NavBar, Produit, DetailsRefrigerateur, et DetailsComputer, ainsi que la fonction afficheDetails pour afficher les détails spécifiques des produits. Des exemples de code sont fournis pour chaque composant, incluant la validation des props avec PropTypes.

Transféré par

hsan.isetsf
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
49 vues6 pages

Devoir Surveillé

Le document décrit le développement d'une application de vente en ligne pour des PC portables et des réfrigérateurs, utilisant ReactJS, vite et Bootstrap. Il détaille la création de composants tels que NavBar, Produit, DetailsRefrigerateur, et DetailsComputer, ainsi que la fonction afficheDetails pour afficher les détails spécifiques des produits. Des exemples de code sont fournis pour chaque composant, incluant la validation des props avec PropTypes.

Transféré par

hsan.isetsf
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Devoir Surveillé

Objectif et description :

On souhaite développer une application pour la vente en ligne de


différents articles. Dans notre contexte, nous nous intéressons
particulièrement à deux types de produits : les PC portables et les
réfrigérateurs, comme le montre la figure 1.

Pour le faire, nous souhaitons utiliser ReactJS, vite et Bootstrap. Cette


application comporte :

1. Une barre de navigation (Un composant [Link] sera développé)


contenant une zone de texte et un bouton "rechercher".

2. Différents composants représentant chacun un produit. Chaque


produit est représenté par un composant [Link] (il s'agit d'un
composant card en bootstrap). Ce composant affiche :

a. Le type et la marque du produit (concaténation)

b. Une image illustrative du produit

c. Une liste contenant les différentes données décrivant le produit.

Les éléments de la liste sont affichés en deux parties. La première


contient les données partagées entre les deux types de produits. La
seconde contient les données spécifiques à chaque produit en
utilisant le rendu conditionnel. Pour cela, deux autres composants
réagissent sont développés.
d. Un bouton ajouter au panier.

3. [Link] : permet d'afficher uniquement les


éléments de la liste spécifiques au composant réfrigérateur
(référence, volume, classe énergétique)

4. [Link] : permet d'afficher uniquement les éléments


de la liste spécifique au composant PC Portable

function App() {
return (
<div className="row row-cols-1 row-cols-md-4 g-4">
<Produit
type="réfrigérateur"
marque="samsung"
couleur="silver"
volume="400L"
energie="A+"
reference="RT40K500JS8"
description="Twin Cooling"
imageSrc="./public/[Link]"
/>

<Produit
type="pc Portable"
marque="lenovo"
couleur="Gris"
ram="16GO"
disque="512G SSD 20 Tris"
processeur="i5 10-128"
description="15.6"
imageSrc="./public/[Link]"
/>
</div>
)
}

Figure 2 : Partie du code du fichier [Link]

1. Donner l’arbre, correspondant à la figure 1, généré par


ReactDom.
2. Développer le composant DetailsRefrigerateur sachant qu’il
permet d’afficher un élément de liste (<li>) pour chacune des
données (référence, volume et énergie) et que toutes les trois
données sont obligatoires et de type string.
3. Développer le composant DetailsComputer sachant qu’il
permet d’afficher un élément de liste (<li>) pour chacune des
données (ram, disque et processeur) et que toutes les trois données
sont de type string et sont obligatoires.
4. Au niveau du composant Produit, développer une fonction
afficheDetails qui affiche, selon le type du produit, soit un
composant DetailsRefrigerateur soit un composant DetailsComputer.

function afficheDetails(props) { ... }

5. Développer le composant Produit permettant de rendre un card


pour chaque produit en affichant :
a. son type et sa marque concaténés,
b. l’image illustrative,
c. une liste qui contient :
i. les données marque et couleur,
ii. DetailsRefrigerateur ou DetailsComputer selon le type
du produit en utilisant la fonction afficheDetails,
iii. une description si elle n’est pas vide,
iv. un bouton "Ajouter au Panier".
Réponse :

2. Composant DetailsRefrigerateur

function DetailsRefrigerateur({ reference, volume, energie }) {


return (
<>
<li>Référence: {reference}</li>
<li>Volume: {volume}</li>
<li>Classe énergétique: {energie}</li>
</>
);
}

[Link] = {
reference: [Link],
volume: [Link],
energie: [Link]
};
3. Composant DetailsComputer

function DetailsComputer({ ram, disque, processeur }) {


return (
<>
<li>RAM: {ram}</li>
<li>Disque: {disque}</li>
<li>Processeur: {processeur}</li>
</>
);
}

[Link] = {
ram: [Link],
disque: [Link],
processeur: [Link]
};
4. Fonction afficheDetails

function afficheDetails(props) {
if ([Link]() === "réfrigérateur") {
return <DetailsRefrigerateur
reference={[Link]}
volume={[Link]}
energie={[Link]}
/>;
} else if ([Link]() === "pc portable") {
return <DetailsComputer
ram={[Link]}
disque={[Link]}
processeur={[Link]}
/>;
}
return null;
}

5. Composant Produit

function Produit(props) {
const { type, marque, couleur, description, imageSrc } = props;

return (
<div className="col">
<div className="card h-100">
<div className="card-body">
<h5 className="card-title">{type} {marque}</h5>
<img src={imageSrc} className="card-img-top" alt={`${type}
${marque}`} />
<ul className="list-group list-group-flush">
<li className="list-group-item">Marque: {marque}</li>
<li className="list-group-item">Couleur: {couleur}</li>
{afficheDetails(props)}
{description && <li className="list-group-
item">Description: {description}</li>}
</ul>
<button className="btn btn-primary mt-3">Ajouter au
Panier</button>
</div>
</div>
</div>
);
}

[Link] = {
type: [Link],
marque: [Link],
couleur: [Link],
description: [Link],
imageSrc: [Link],
// Props pour réfrigérateur
reference: [Link],
volume: [Link],
energie: [Link],
// Props pour PC portable
ram: [Link],
disque: [Link],
processeur: [Link]
};

Notes supplémentaires:

1. J'ai utilisé PropTypes pour la validation des props (nécessite l'import


de 'prop-types')
2. Le composant Produit gère à la fois les props pour réfrigérateur et
PC portable
3. La description est affichée uniquement si elle existe
4. L'image utilise la prop imageSrc passée en paramètre
5. Le bouton "Ajouter au Panier" est stylisé avec les classes Bootstrap
6. La fonction afficheDetails est appelée à l'intérieur du composant
Produit pour afficher les détails

Vous aimerez peut-être aussi