Dans les applications Web d'aujourd'hui, la mise à jour des informations sur plusieurs onglets ou fenêtres peut considérablement améliorer l'expérience utilisateur. Par exemple, si un utilisateur se déconnecte dans un onglet, vous souhaitez que cette action soit reflétée dans tous les autres onglets. L'API Broadcast Channel facilite cela en permettant la communication entre différents contextes de navigation de même origine. Cet article vous expliquera comment utiliser cette API dans une application React.
L'API Broadcast Channel est une méthode simple permettant de permettre la communication entre différents onglets, fenêtres ou iframes d'un même site Web. Il vous permet de diffuser des messages vers tous les autres contextes écoutant sur le même canal, ce qui le rend idéal pour les mises à jour et la synchronisation en temps réel.
• Mises à jour en temps réel : synchronisez les données telles que les sessions utilisateur sur différents onglets.
• Facilité d'intégration : simple à ajouter à votre application React existante.
• Aucune bibliothèque supplémentaire : fonctionne nativement dans les navigateurs modernes sans dépendances supplémentaires.
Voyons comment utiliser l'API Broadcast Channel dans une application React en créant un hook personnalisé pour gérer la communication.
Tout d'abord, créez un hook personnalisé nommé useBroadcastChannel pour encapsuler la logique du canal de diffusion.
import { useEffect, useState } from 'react'; const useBroadcastChannel = (channelName) => { const [message, setMessage] = useState(null); const channel = new BroadcastChannel(channelName); useEffect(() => { const handleMessage = (event) => { setMessage(event.data); }; channel.onmessage = handleMessage; // Clean up the channel when the component unmounts return () => { channel.close(); }; }, [channel]); const sendMessage = (msg) => { channel.postMessage(msg); }; return { message, sendMessage }; }; export default useBroadcastChannel;
Ce hook crée un nouveau BroadcastChannel, écoute les messages entrants et fournit une fonction pour envoyer des messages.
Utilisons notre hook personnalisé dans un composant React pour gérer les sessions de connexion sur différents onglets.
import React, { useEffect } from 'react'; import useBroadcastChannel from './useBroadcastChannel'; const AuthManager = () => { const { message, sendMessage } = useBroadcastChannel('auth_channel'); const handleLogin = () => { // Notify all tabs that the user has logged in sendMessage({ type: 'login', user: 'JohnDoe' }); }; const handleLogout = () => { // Notify all tabs that the user has logged out sendMessage({ type: 'logout' }); }; useEffect(() => { if (message) { if (message.type === 'logout') { alert('You have been logged out in another tab!'); } } }, [message]); return (); }; export default AuthManager;Authentication Manager
Ce composant AuthManager utilise le hook useBroadcastChannel pour gérer l'état d'authentification des utilisateurs dans les onglets. Lorsqu'un utilisateur se connecte ou se déconnecte, un message est envoyé à tous les autres onglets du canal auth_channel. Si un message de déconnexion est reçu dans un onglet, il déclenche une alerte pour avertir l'utilisateur.
L'API Broadcast Channel offre un moyen simple de synchroniser les données sur plusieurs onglets ou fenêtres de vos applications Web. En utilisant un hook React personnalisé, vous pouvez facilement gérer la messagerie en temps réel et améliorer l'expérience utilisateur. Que vous gériez les états de connexion ou que vous synchronisiez d'autres types de données, l'API Broadcast Channel simplifie la communication entre les tableaux.
• Documents Web MDN sur l'API Broadcast Channel
Gazouillement
GitHub
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