Back

Comment créer des messages Toast en React avec Toastify

Comment créer des messages Toast en React avec Toastify

Les notifications toast sont des alertes rapides et non intrusives qui maintiennent les utilisateurs informés sans perturber leur flux de travail. React-Toastify simplifie l’implémentation de ces notifications, équilibrant facilité d’utilisation et personnalisation.

Points clés

  • React-Toastify simplifie l’ajout de notifications toast.
  • Prend en charge plusieurs types de notifications (succès, erreur, avertissement, info).
  • Positions et styles personnalisables.
  • Offre des fonctionnalités avancées comme les notifications basées sur des promesses.

Débuter avec React-Toastify

Installation

Installez React-Toastify :

npm install react-toastify
# ou
yarn add react-toastify

Configuration de base

Importez les composants nécessaires et le CSS :

import { ToastContainer, toast } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';

Placez ToastContainer dans votre App principal :

function App() {
  return (
    <div>
      <button onClick={() => toast(""Hello, Toastify!"")}>Notify</button>
      <ToastContainer />
    </div>
  );
}

Types de notifications Toast

Utilisez des types de toast spécifiques pour plus de clarté :

  • Succès : toast.success(""Enregistré avec succès !"");
  • Erreur : toast.error(""Une erreur s'est produite !"");
  • Avertissement : toast.warning(""Vérifiez votre saisie !"");
  • Info : toast.info(""Mise à jour disponible !"");
  • Par défaut : toast(""Message neutre"");

Personnalisation des notifications Toast

Positionnement

Personnalisez les positions des toasts :

toast(""Message"", { position: ""bottom-center"" });

Les positions incluent top-right, top-center, top-left, bottom-right, bottom-center, et bottom-left.

Style

Appliquez des styles personnalisés :

toast(""Toast stylisé"", { className: ""custom-toast"" });

Exemple CSS :

.custom-toast {
  background: navy;
  color: white;
  border-radius: 4px;
}

Style conditionnel

Style basé sur le type :

const notify = (type, message) => {
  toast[type](message, { className: `${type}-toast` });
};

Fonctionnalités avancées

Toasts basés sur des promesses

Gérez les opérations asynchrones de manière fluide :

const promise = fetch('url').then(res => res.json());
toast.promise(promise, {
  pending: ""Chargement..."",
  success: ""Chargé avec succès !"",
  error: ""Échec du chargement des données.""
});

Contenu personnalisé

Incluez des composants React :

toast(<div>Contenu HTML personnalisé <button onClick={() => alert('Cliqué !')}>Cliquer</button></div>);

Centre de notifications

Suivez facilement les notifications :

import { useNotificationCenter } from 'react-toastify/addons/use-notification-center';

const NotificationCenter = () => {
  const { notifications, markAllAsRead } = useNotificationCenter();
  return (
    <div>
      <button onClick={markAllAsRead}>Marquer tout comme lu</button>
      {notifications.map(n => <div key={n.id}>{n.content}</div>)}
    </div>
  );
};

Bonnes pratiques

  • Utilisez avec parcimonie : Évitez de submerger les utilisateurs.
  • Choisissez les types appropriés : Communiquez clairement l’intention du message.
  • Définissez la durée avec soin : Les messages importants nécessitent une visibilité plus longue.
  • Accessibilité : Assurez-vous d’un contenu lisible et d’un contraste clair.
  • Messages concis : Indiquez clairement ce qui est nécessaire.

Exemple d’implémentation complète

import React, { useState } from ""react"";
import { ToastContainer, toast } from ""react-toastify"";
import ""react-toastify/dist/ReactToastify.css"";

function ProfileForm() {
  const [data, setData] = useState({ username: """", email: """" });

  const handleSubmit = (e) => {
    e.preventDefault();

    if (!data.username || !data.email) {
      toast.warning(""Tous les champs sont requis !"");
      return;
    }

    const saveData = new Promise((resolve, reject) => {
      setTimeout(() => {
        data.email.includes(""@"") ? resolve() : reject();
      }, 1500);
    });

    toast.promise(saveData, {
      pending: ""Enregistrement..."",
      success: ""Profil mis à jour !"",
      error: ""Email invalide !""
    });
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type=""text""
        placeholder=""Nom d'utilisateur""
        value={data.username}
        onChange={(e) => setData({ ...data, username: e.target.value })}
      />
      <input
        type=""email""
        placeholder=""Email""
        value={data.email}
        onChange={(e) => setData({ ...data, email: e.target.value })}
      />
      <button type=""submit"">Soumettre</button>
      <ToastContainer />
    </form>
  );
}

Conclusion

React-Toastify aide à créer des notifications efficaces et non intrusives dans les applications React. Sa simplicité et sa flexibilité permettent une intégration rapide tout en offrant une personnalisation approfondie pour répondre aux besoins de votre application.

FAQ

Oui, React-Toastify prend en charge les composants React personnalisés comme contenu des toasts.

Définissez `autoClose: false` dans les options du toast pour que les notifications persistent.

Oui, utilisez `toast.update(toastId, options)` avec l'ID du toast.

Utilisez la propriété `limit` sur `ToastContainer` pour contrôler les notifications simultanées.

Oui, assurez-vous des importations et du rendu côté client, en particulier avec des frameworks comme Next.js.

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers