"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Envoyez des données entre les onglets dans React.

Envoyez des données entre les onglets dans React.

Publié le 2024-09-17
Parcourir:371

Send data between tabs in React.

Dans cet article, nous verrons comment envoyer des données entre les composants dans React à l'échelle mondiale, même dans différents onglets du navigateur.


Histoire

Imaginez que vous ayez une liste d'éléments, tels que des utilisateurs.

Chacun des utilisateurs peut être ouvert dans une fenêtre modale pour modification.

Vous n'avez aucun abonnement au backend, ce qui signifie que la liste des utilisateurs ne sera pas automatiquement synchronisée avec le backend si un utilisateur change.

Ainsi, une fois le profil d'un utilisateur mis à jour, vous souhaitez actualiser automatiquement la liste des utilisateurs sous la fenêtre modale (même dans tous les autres onglets de votre site Web).

Que ferons-nous pour synchroniser les données dans ces composants et onglets non liés ?


Solution

La fenêtre modale et la liste des utilisateurs doivent pouvoir échanger des événements et des données.

Ainsi, si une action est effectuée dans la fenêtre modale, l'événement doit être envoyé à tous les composants en attente de ce type d'action (par exemple la liste des utilisateurs), afin qu'ils puissent réagir à cet événement, par exemple en synchronisation des données.

Configurons une telle communication entre les composants "UserList" et "UserProfileModal" en utilisant un petit package use-app-events :

const UserProfileModal = () => {
  // retrieve a user ID from URL, for example
  const { userId } = useParams();

  // 1. Create an instance of useAppEvents
  const { notifyEventListeners } = useAppEvents();

  const submitUpdate = async () => {
    // send a request to BE here, await the response...

    // 2. Send an event containing the updated user ID to
    // all other components that are listening for it
    notifyEventListeners('user-update', userId);
  };

  return ;
};

 ? Fenêtre modale

 ? La liste des utilisateurs

const UserList = () => {
  const [users, setUsers] = useState([]);

  // 1. Create an instance of useAppEvents
  const { listenForEvents } = useAppEvents();

  // 2. Listen and wait for the 'user-update' event to happen in the app
  listenForEvents('user-update', (userId) => {
    // 3. React to the occurred event by loading the refreshed
    // list of users from BE here...
  });

  return users.map((user) => (
    // render users here...
  ));
};

use-app-events est un petit package open source sans dépendances ni risques, il est également activement maintenu et sûr à utiliser.

À ce stade, la mise à jour du profil utilisateur dans UserProfileModal informera automatiquement tous les auditeurs comme UserList, ce qui déclenchera une actualisation de la liste des utilisateurs dans UserList, entraînant une meilleure UX.

Peu importe où UserList et UserProfileModal sont placés dans l'arborescence des composants, ils pourront toujours s'envoyer des données entre eux, même dans différents onglets du navigateur.


Conclusion

Si vous avez besoin de configurer sans effort une communication globale pour échanger des données entre les composants, utilisez le package use-app-events.

Il fournit une API facile à utiliser, une documentation complète et une saisie stricte pour vous garantir la meilleure expérience de développeur.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/maqs/send-data-between-tabs-in-react-obk?1 En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3