Heim > Web-Frontend > js-Tutorial > Senden Sie Daten zwischen Tabs in React.

Senden Sie Daten zwischen Tabs in React.

DDD
Freigeben: 2024-09-14 06:23:32
Original
1205 Leute haben es durchsucht

Send data between tabs in React.

In diesem Artikel erfahren Sie, wie Sie Daten zwischen Komponenten in React global senden, sogar in verschiedenen Browser-Registerkarten.


Geschichte

Stellen Sie sich vor Sie haben eine Liste mit Elementen, beispielsweise Benutzern.

Jeder Benutzer kann zur Änderung in einem modalen Fenster geöffnet werden.

Sie haben keine Abonnements für das Backend, was bedeutet, dass die Liste der Benutzer nicht automatisch mit dem Backend synchronisiert wird, wenn sich ein Benutzer ändert.

Sobald also das Profil eines Benutzers aktualisiert wird, möchten Sie die Liste der Benutzer im modalen Fenster automatisch aktualisieren (auch in allen anderen Registerkarten Ihrer Website).

Was werden wir tun, um Daten in diesen unabhängigen Komponenten und Registerkarten zu synchronisieren?


Lösung

Das modale Fenster und die Benutzerliste sollten in der Lage sein, Ereignisse und Daten auszutauschen.

Wenn also eine Aktion im modalen Fenster ausgeführt wird, sollte das Ereignis an alle Komponenten gesendet werden, die auf diese Art von Aktion warten (z. B. die Liste der Benutzer), damit diese beispielsweise auf dieses Ereignis reagieren können Daten synchronisieren.

Lassen Sie uns eine solche Kommunikation zwischen den Komponenten „UserList“ und „UserProfileModal“ mithilfe eines kleinen Pakets use-app-events einrichten:

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 <button onClick={submitUpdate}>Save changes</button>;
};
Nach dem Login kopieren

? Modales Fenster

? Die Liste der Benutzer

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...
  ));
};
Nach dem Login kopieren

use-app-events ist ein kleines Open-Source-Paket ohne Abhängigkeiten und Risiken, es wird außerdem aktiv gepflegt und ist sicher zu verwenden.

An diesem Punkt werden durch die Aktualisierung des Benutzerprofils in UserProfileModal automatisch alle Listener wie UserList benachrichtigt, was eine Aktualisierung der Benutzerliste in UserList auslöst, was zu einer besseren UX führt.

Es spielt keine Rolle, wo UserList und UserProfileModal im Komponentenbaum platziert werden, sie können weiterhin Daten untereinander senden, sogar in verschiedenen Browser-Registerkarten.


Abschluss

Wenn Sie mühelos eine globale Kommunikation zum Datenaustausch zwischen Komponenten einrichten müssen, nutzen Sie das Paket „use-app-events“.

Es bietet eine benutzerfreundliche API, umfangreiche Dokumentation und strenge Typisierung, um sicherzustellen, dass Sie die beste Entwicklererfahrung haben.

Das obige ist der detaillierte Inhalt vonSenden Sie Daten zwischen Tabs in React.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage