ホームページ >ウェブフロントエンド >jsチュートリアル >React でリアルタイム通知センターを構築する
通知により、ユーザーは常に情報を入手し、関心を持ち続けることができます。カスタム React 通知センターを使用すると、ユーザー エクスペリエンスを完全に制御および調整できます。これは、リアルタイム更新のためのフロントエンド コンポーネントとバックエンド コンポーネントの両方をカバーする、ゼロから構築するための簡潔なガイドです。
フロントエンド
バックエンド
Microservice | Functionality |
---|---|
Notification Service | Generates and stores notifications |
Dispatch Service | Sends notifications to different channels |
User Preferences Service | Manages user settings and preferences |
例: Node.js/Express の通知サービス
const express = require('express'); const app = express(); let notifications = []; app.post('/notify', (req, res) => { const notification = { id: notifications.length + 1, type: req.body.type, message: req.body.message, userId: req.body.userId, status: 'unread', timestamp: new Date() }; notifications.push(notification); res.status(200).send(notification); }); app.listen(3000, () => { console.log('Notification Service running on port 3000'); });
例: Socket.IO を使用した WebSocket サーバー
const io = require('socket.io')(3001); io.on('connection', (socket) => { console.log('User connected:', socket.id); socket.emit('notification', { message: 'New notification!', timestamp: new Date() }); socket.on('disconnect', () => { console.log('User disconnected:', socket.id); }); });
React でのクライアント側の統合
import React, { useEffect, useState } from 'react'; import io from 'socket.io-client'; const socket = io('http://localhost:3001'); function NotificationCenter() { const [notifications, setNotifications] = useState([]); useEffect(() => { socket.on('notification', (notification) => { setNotifications(prev => [...prev, notification]); }); }, []); return ( <div> <h2>Notification Center</h2> {notifications.map((notif, index) => ( <div key={index}>{notif.message} - {notif.timestamp}</div> ))} </div> ); } export default NotificationCenter;
例: React でのポーリングの実装
import React, { useEffect, useState } from 'react'; function NotificationCenter() { const [notifications, setNotifications] = useState([]); useEffect(() => { const interval = setInterval(() => { fetch('/api/notifications') .then(response => response.json()) .then(data => setNotifications(data)); }, 5000); // Poll every 5 seconds return () => clearInterval(interval); }, []); return ( <div> <h2>Notification Center</h2> {notifications.map((notif, index) => ( <div key={index}>{notif.message}</div> ))} </div> ); } export default NotificationCenter;
例: Service Worker の登録
if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js').then(registration => { console.log('Service Worker registered:', registration.scope); }).catch(error => { console.error('Service Worker registration failed:', error); }); }
例: 通知の表示
if (Notification.permission === 'granted') { new Notification('New message!', { body: 'Click to view the message.', icon: '/path/to/icon.png' }); } else if (Notification.permission !== 'denied') { Notification.requestPermission().then(permission => { if (permission === 'granted') { new Notification('New message!', { body: 'Click to view the message.', icon: '/path/to/icon.png' }); } }); }
例: Node.js の FCM を使用したプッシュ通知の送信
const admin = require('firebase-admin'); const serviceAccount = require('./path/to/serviceAccountKey.json'); admin.initializeApp({ credential: admin.credential.cert(serviceAccount) }); const message = { notification: { title: 'New Notification', body: 'You have a new notification!' }, token: 'device-token' }; admin.messaging().send(message) .then(response => console.log('Message sent:', response)) .catch(error => console.error('Error sending message:', error));
例: 通知リストコンポーネント
import React from 'react'; function NotificationList({ notifications }) { return ( <div> {notifications.map(notification => ( <div key={notification.id}>{notification.message}</div> ))} </div> ); } export default NotificationList;
例:react-toastify を使用したトースト通知
import { toast } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; toast.configure(); function notify() { toast('New notification!', { position: toast.POSITION.BOTTOM_RIGHT }); } notify();
例: Redux を使用した状態の管理
import { createSlice } from '@reduxjs/toolkit'; const notificationSlice = createSlice({ name: 'notifications', initialState: [], reducers: { addNotification: (state, action) => { state.push(action.payload); }, markAsRead: (state, action) => { const notification = state.find(n => n.id === action.payload); if (notification) { notification.read = true; } } } }); export const { addNotification, markAsRead } = notificationSlice.actions; export default notificationSlice.reducer;
優秀な開発者としては、React で通知システムを最初から構築する必要がありますが、上司が早急に通知システムを必要としていて、休暇の計画がある場合 (または本当に休暇が必要な場合)、私の記事をチェックしてください。道具。すべてが簡素化され、すべての一般的な SDK で利用可能な新しい通知 API としてすぐに使用できるコンポーネントが提供されます。私たちがインフラを処理している間、あなたはくつろぐことができます。 ??
以上がReact でリアルタイム通知センターを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。