في تطبيقات الويب اليوم، يمكن أن يؤدي الحفاظ على تحديث المعلومات عبر علامات تبويب أو نوافذ متعددة إلى تحسين تجربة المستخدم بشكل كبير. على سبيل المثال، إذا قام مستخدم بتسجيل الخروج في علامة تبويب واحدة، فأنت تريد أن ينعكس هذا الإجراء في جميع علامات التبويب الأخرى. تعمل واجهة برمجة تطبيقات قناة البث على تسهيل ذلك من خلال السماح بالاتصال بين سياقات التصفح المختلفة من نفس المصدر. سترشدك هذه المقالة حول كيفية استخدام واجهة برمجة التطبيقات هذه في تطبيق React.
طريقة بسيطة لتمكين الاتصال بين علامات التبويب أو النوافذ أو إطارات iframe المختلفة لنفس موقع الويب. فهو يسمح لك ببث الرسائل إلى جميع السياقات الأخرى التي تستمع إليها على نفس القناة، مما يجعلها مثالية للتحديثات والمزامنة في الوقت الفعلي.
لماذا نستخدمها؟
: مزامنة البيانات مثل جلسات المستخدم عبر علامات تبويب مختلفة. •
سهولة التكامل: من السهل إضافتها إلى تطبيق React الموجود لديك. •
لا توجد مكتبات إضافية: تعمل أصلاً في المتصفحات الحديثة دون تبعيات إضافية.
إعداد واجهة برمجة تطبيقات قناة البث في Reactإنشاء خطاف مخصص
استيراد { useEffect, useState } من 'react';
const useBroadcastChannel = (channelName) => {
const [message, setMessage] = useState(null);
قناة const = new BroadcastChannel(channelName);
استخدام التأثير (() => {
const HandleMessage = (الحدث) => {
setMessage(event.data);
};
Channel.onmessage = HandleMessage;
// تنظيف القناة عند إلغاء تحميل المكون
العودة () => {
قناة. إغلاق ()؛
};
}, [قناة]);
const sendMessage = (msg) => {
channel.postMessage(msg);
};
إرجاع { رسالة، إرسال رسالة }؛
};
تصدير useBroadcastChannel الافتراضي؛
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;
استخدم الخطاف في مكون React
استيراد React، { useEffect } من 'react'؛
استيراد useBroadcastChannel من './useBroadcastChannel'؛
const AuthManager = () => {
const { message, sendMessage } = useBroadcastChannel('auth_channel');
مقبض ثابت = () => {
// إعلام كافة علامات التبويب التي قام المستخدم بتسجيل الدخول إليها
sendMessage({ type: 'login', user: 'JohnDoe' });
};
const HandleLogout = () => {
// إعلام جميع علامات التبويب التي قام المستخدم بتسجيل الخروج منها
sendMessage({ النوع: 'تسجيل الخروج' });
};
استخدام التأثير (() => {
إذا (رسالة) {
إذا (message.type === 'تسجيل الخروج') {
تنبيه ("لقد تم تسجيل خروجك في علامة تبويب أخرى!")؛
}
}
}، [رسالة])؛
يعود (
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
خاتمة
مزيد من القراءة
تواصل معي
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3