この記事では、異なるブラウザー タブであっても、React のコンポーネント間でデータをグローバルに送信する方法について説明します。
ユーザーなどのアイテムのリストがあると想像してください。
各ユーザーはモーダル ウィンドウで開いて変更できます。バックエンドへのサブスクリプションがありません。つまり、ユーザーが変更された場合、ユーザーのリストはバックエンドと自動的に同期されません。
そこで、ユーザーのプロフィールが更新されたら、モーダル ウィンドウの下のユーザーのリストを (ウェブサイトの他のすべてのタブでも) 自動的に更新したいと考えます。
これらの無関係なコンポーネントとタブのデータを同期するにはどうすればよいですか?
モーダル ウィンドウとユーザーのリストはイベントとデータを交換できる必要があります。
したがって、アクションがモーダル ウィンドウで実行される場合、この種のアクション (ユーザーのリストなど) を待機しているすべてのコンポーネントにイベントを送信して、コンポーネントがこのイベントに反応できるようにする必要があります。データを同期しています。小さなパッケージ use-app-events:
を使用して、「UserList」コンポーネントと「UserProfileModal」コンポーネント間の通信を設定しましょう。
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 ; };
?const UserList = () => { const [users, setUsers] = useState([]); // 1. useAppEvents のインスタンスを作成します const { listenForEvents } = useAppEvents(); // 2. アプリ内で「user-update」イベントが発生するのをリッスンして待ちます listenForEvents('user-update', (userId) => { // 3. 更新されたファイルをロードして、発生したイベントに反応します。 // BE のユーザーのリストはここにあります... }); return users.map((user) => ( // ここにユーザーをレンダリングします... )); };モーダルウィンドウ
?ユーザーのリスト
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 ; };
この時点で、UserProfileModal のユーザー プロファイルの更新は、UserList などのすべてのリスナーに自動的に通知され、UserList 内のユーザーのリストの更新がトリガーされ、UX が向上します。use-app-events は、依存関係やリスクのない小さなオープンソース パッケージであり、積極的にメンテナンスされており、安全に使用できます。
UserList と UserProfileModal がコンポーネント ツリー内のどこに配置されても問題はありません。
異なるブラウザ タブにいても、相互にデータを送信できます。
使いやすい API、広範なドキュメント、厳密な型付けを提供し、最高の開発者エクスペリエンスを保証します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3