Exercices

LocalStorage Weather Api ToDo et LocalStorage

React+ionic

Ionic Create project 4.React Outils utiles 5.Lifecycle Methods 6.JSX

Gestion Ventes

Produit CRUD

6.Form :Ajouter un produit 8.Liste produits 9.Pagination 10.Liste produits +Pagination 11.Liste produits +Datatable 11.Liste produits +load more 12.Supprimer un produit 14.Details d'un produit 15.Recherche et Autocomplete

Reacts:Utils

Gestion des erreurs Variables d'environment Cookies Internationalization proptypes Form validation React Animation Fragment Google Maps

Utilisateur CRUD

18.Inscription upload file 19.Connexion et Les sessions 19.Connexion: JWT Token

Ventes CRUD

17.Vendre un produit 18.Facture Generate PDF 19.Statisques Charts

Redux





Document

Project Details

Exercice : gère l'ajout de films et l'affichage

Auteur : Bilal Zouine

Description : Cet code gère l'ajout de films et l'affichage d'une liste de films

Fonctionnalités :
  • Ajouter un film avec des informations (titre, durée, genre).
  • Valider que tous les champs du formulaire sont remplis avant l'ajout.
  • Afficher une liste des films ajoutés sous forme de tableau.
  • Gérer un identifiant unique pour chaque film ajouté.
  • Réinitialiser les champs du formulaire après l'ajout d'un film.
Illustration de l'exercice
Code :
             
                

import { useState } from "react"

// Fonction qui gère l'ajout de films et l'affichage d'une liste de films
export default function FilmManager() {
    // Déclaration de l'état pour stocker la liste des films
    const [listeFilms, setListeFilms] = useState([])

    // Déclaration de l'état pour stocker les informations d'un film
    const [film, setFilm] = useState({
        idfilm: 1,
        titre: '',
        duree: '',
        genre: ''
    })

    // Fonction pour récupérer les informations saisies par l'utilisateur pour un film
    const getFilmInfo = (event) => {
        const { value, name } = event.target
        setFilm(prevFilm => ({
            ...prevFilm, [name]: value
        }))
        console.log(film);
    }

    // Fonction pour ajouter un film à la liste des films
    const ajouterFilm = () => {
        if (film.titre !== "" && film.duree !== 0 && film.genre) {
            setListeFilms(prevListFilm => (
                [...prevListFilm, film]
            ))

            // Réinitialiser les champs du film après l'ajout
            setFilm(prevFilm => ({
                idfilm: film.idfilm + 1,
                titre: '',
                duree: '',
                genre: ''
            }))
        } else {
            alert('Tous les champs sont obligatoires')
        }
    }

    return (
        <div className="container mt-5 text-warning">
            <fieldset className="w-75 mx-auto mb-3">
                <legend className="text-center">Ajouter un film</legend>

                {/* Formulaire pour saisir les informations d'un film */}
                <form>
                    <div className="form-group">
                        <label>Titre</label>
                        <input type="text" className="form-control" name="titre" onChange={getFilmInfo} value={film.titre} />
                    </div>
                    <div className="form-group">
                        <label>Durée</label>
                        <input type="number" className="form-control" name="duree" onChange={getFilmInfo} value={film.duree} />
                    </div>
                    <div className="form-group">
                        <label>Genre</label>
                        <input type="text" className="form-control" name="genre" onChange={getFilmInfo} value={film.genre} />
                    </div>
                    <div className="form-group">
                        <input type="button" value="Ajouter" className="btn btn-info fw-bold d-flex mx-auto bt-sm mt-3" onClick={ajouterFilm} />
                    </div>
                </form>
            </fieldset>

            {/* Affichage de la liste des films ajoutés */}
            <h3 className="text-center text-white fw-bold">Liste des films</h3>
            <table className="table table-bordered table-sm w-75 mx-auto ">
                <thead className="bg-info text-white text-center">
                    <tr>
                        <th>Id</th>
                        <th>Titre</th>
                        <th>Genre</th>
                        <th>Durée</th>
                    </tr>
                </thead>
                <tbody>
                    {
                        listeFilms.map((f) => {
                            return (
                                <tr key={f.idfilm}>
                                    <td>{f.idfilm}</td>
                                    <td>{f.titre}</td>
                                    <td>{f.genre}</td>
                                    <td>{f.duree}</td>
                                </tr>
                            )
                        })
                    }
                </tbody>
            </table>
        </div>
    )
}