Apollo Client. Jetzt mit React Hooks

Der Autor des Materials, dessen Übersetzung wir heute veröffentlichen, sagt, dass die Mission der Apollo Client-Entwickler darin besteht, dieses Tool zur modernsten und bequemsten Lösung für die Verwaltung des Status von React-Anwendungen zu machen. Die React-Community entwickelt und beherrscht neue und effektive Wege zur Entwicklung von Benutzeroberflächen. Die Entwickler von Apollo Client bemühen sich sicherzustellen, dass ihr Projekt alle relevanten Elemente der React-Welt unterstützt. In Anlehnung an diese Tradition stellen Apollo Client-Entwickler eine neue Version des Systems vor, die mit React Hook- Unterstützung ausgestattet ist.

Bild

Haken wurden in Reaktion 16.8 eingeführt . Dies ist ein neuer Mechanismus, mit dem Sie statusbehaftete Komponenten erstellen können, ohne sich mit Problemen befassen zu müssen, die für klassenbasierte Komponenten spezifisch sind. Jetzt enthält Apollo Client drei Hooks, die in Anwendungen verwendet werden können - an allen Stellen, an denen Komponenten höherer Ordnung oder Render-Requisiten-Mechanismen verwendet werden. Dies sind die Hooks useQuery, useMutation und useSubscription . Diese Hooks sind leicht zu erlernen und bieten viele Vorteile gegenüber der bereits vorhandenen API. Dies betrifft insbesondere die Reduzierung der Größe des Anwendungspakets und die Reduzierung der Menge an Boilerplate-Code.

Erste Schritte


Wenn Sie ein neues Apollo-Projekt erstellen möchten, empfehlen wir, das folgende Paket zu installieren, nachdem Sie Ihre Apollo Client-Instanz konfiguriert haben:

 npm install @apollo/react-hooks 

Dieses Paket exportiert die ApolloProvider Komponente, mit der der Apollo-Client mit einer React-Anwendung verbunden wird. Ebenso wurde die Arbeit mit der alten API organisiert.

Wenn Sie bereits ein Projekt haben, das Apollo verwendet, haben Sie mehrere Möglichkeiten, zu Hooks zu wechseln. Die Wahl einer bestimmten Methode hängt davon ab, wie genau Sie den Übergang durchführen möchten. Details dazu finden Sie hier .

Warum sind Haken die Zukunft?


Apollo Client unterstützt weiterhin APIs, die auf Komponenten höherer Ordnung und Render-Requisiten basieren. Diese APIs werden noch einige Zeit im System vorhanden sein. Wir glauben, dass Hooks in Zukunft der beste Mechanismus zum Laden von Daten mit dem Apollo Client sein werden. Obwohl diejenigen, die Apollo bereits verwenden, jetzt nicht zu Hooks wechseln müssen, sollten sie Hooks für neue Komponenten verwenden. Diese Empfehlung hat mehrere Gründe, die wir jetzt betrachten werden.

▍Wenn Sie Hooks verwenden, benötigen Sie weniger Code, um mit Daten zu arbeiten


Hooks reduzieren die Menge an Boilerplate-Code, die für die Arbeit mit Daten verwendet wird. Dies führt zu einer Verringerung der Größe der Komponenten und zu der Tatsache, dass solche Komponenten leichter zu verstehen sind. Infolgedessen müssen sich Entwickler nicht mehr mit der Anordnung von Komponenten höherer Ordnung befassen oder die komplexe Logik von Render-Requisiten analysieren. Zum Laden von Daten reicht es aus, die einzige useQuery Funktion useQuery :

 const LAST_LAUNCH = gql`  query lastLaunch {    launch {      id      timestamp    }  } `; export function LastLaunch() {  const { loading, data } = useQuery(LAST_LAUNCH);  return (    <div>      <h1>Last Launch</h1>      {loading ? <p>Loading</p> : <p>Timestamp: {data.launch.timestamp}</p>}    </div>  ); } 

Hier wird das Laden von Daten mit dem Apollo Client useQuery Hook gezeigt useQuery
Schauen Sie sich diese Tutorial-Anwendung an, in der Sie ein funktionierendes Beispiel für die Verwendung von Apollo Client-Hooks sehen.

▍Mehrfachmutationen


Wenn Sie mehrere Mutationen in einer einzelnen Komponente ausführen, kann die Verwendung von Komponenten höherer Ordnung oder des Render-Requisiten-Mechanismus zu schwer verständlichem Code führen. Die Verwendung der API-Render-Requisite, die Konstruktion von Strukturen, die aus ineinander eingebetteten Mutation bestehen, vermittelt einen falschen Eindruck von strukturiertem Code und seiner klaren Hierarchie. Der neue useMutation Hook umgeht dieses Problem vollständig. Tatsache ist, dass seine Verwendung auf einen einfachen Funktionsaufruf reduziert wird. Das folgende Beispiel zeigt, wie mehrere Mutationen und Abfragen miteinander interagieren können. All dies geschieht innerhalb derselben Komponente:

 function Message() {  const [saveMessage, { loading }] = useMutation(SAVE_MESSAGE);  const [deleteMessage] = useMutation(DELETE_MESSAGE);  const { data } = useQuery(GET_MESSAGE);  return (    <div>      <p>        {loading          ? 'Loading ...'          : `Message: ${data && data.message ? data.message.content : ''}`}      </p>      <p>        <button onClick={() => saveMessage()}>Save</button>        <button onClick={() => deleteMessage()}>Delete</button>      </p>    </div>  ); } 

Hier wird der useMutation Hook verwendet. Hier können Sie mehrere Mutationen in Aktion sehen . Diese Beispielanwendung enthält auch eine ähnliche Komponente, die mit Render-Requisiten erstellt wurde. Dies gibt Ihnen die Möglichkeit, diese Komponente mit der mit Hooks erstellten Komponente zu vergleichen.

▍ Verbesserte TypeScript-Unterstützung


Es ist kein Geheimnis, dass wir große TypeScript-Fans sind. Die Funktionen der neuen Hooks passen gut zu den automatischen Typdefinitionen, die von der Apollo CLI generiert werden. Dies erleichtert das Schreiben von typsicherem Code für React-Komponenten erheblich. So sieht das Laden von Daten mit den useQuery und TypeScript aus:

 import { RocketData, RocketVars } from './types'; const GET_ROCKET_INVENTORY = gql`  query getRocketInventory($year: Int!) {    rocketInventory(year: $year) {      id      year    }  } `; export function RocketInventoryList() {  const { loading, data } = useQuery<RocketData, RocketVars>(    GET_ROCKET_INVENTORY,    { variables: { year: 2019 } }  );  return (/* ... show data ... */); } 

Apollo- und TypeScript-Hooks erleichtern die Entwicklung stark typisierter React-Komponenten.

Zusätzliche Apollo Client-Verbesserungen für React-Entwickler


Obwohl sich diese Version von Apollo auf neue Hooks konzentriert, können wir über einige weitere interessante neue Funktionen sprechen.

▍ Reduzierung der Bündelgröße um 50%


Während die Größe des minimierten und komprimierten gzip-Pakets React react-apollo@2 10,6 KB beträgt, beträgt die Größe des React react-apollo@3 Pakets nur 7,8 KB . Wenn das Paket @apollo/react-hooks für Sie ausreicht, wird die Größe des Bundles auf nur 5,1 KB reduziert. Dies ergibt eine Einsparung von 50% im Vergleich zu react-apollo@2 .

▍ Verzögerte Abfrageausführung


Der useQuery führt seine Abfrage zum Zeitpunkt des useQuery der Funktion aus. Dies ist jedoch genau das Verhalten des Systems, das nicht immer benötigt wird. Stellen Sie sich beispielsweise ein Feld zur Eingabe einer Suchabfrage vor, in dem der Benutzer aufgefordert wird. Möglicherweise müssen Sie eine Komponente mit einem solchen Feld anzeigen, um zu akzeptieren, was der Benutzer eingibt. Gleichzeitig wird die Ausführung der Abfrage an den Suchserver jedoch verzögert, bis der Benutzer beginnt, etwas in das Feld einzugeben. Um dieses Szenario zu implementieren, können Sie den useLazyQuery Hook verwenden, der ein Tupel mit der execute an der zweiten Position zurückgibt:

 const [execute, { loading, data }] = useLazyQuery(GET_INVENTORY); 

Die Anforderung wird erst ausgeführt, wenn Sie die execute aufrufen. Zu diesem Zeitpunkt wird die Komponente erneut gerendert und das mit useQuery implementierte übliche Abfrageausführungsschema angewendet.

▍Neue API-Dokumentation


Wir haben die Apollo Client- Dokumentation durch Hinzufügen von Hook-Informationen aktualisiert. Wir empfehlen, sie von Personen zu verwenden, die gerade mit unserem System begonnen haben. Trotzdem haben wir keine Informationen aus der Dokumentation über die Arbeit mit Komponenten höherer Ordnung und mit dem Render-Requisiten-Mechanismus entfernt. In den Codebeispielen, die in der Dokumentation zu finden sind, können Sie jetzt das neue Dropdown-Menü verwenden, mit dem Sie zwischen Code wechseln können, der die Lösung des gleichen Problems anhand des Ansatzes zeigt, den der Leser am besten mag.


Verschiedene Codeoptionen finden Sie in der Dokumentation

Zusammenfassung


Die Entwickler von Apollo Client sagen, dass sie an React am meisten mögen, weil das Kernteam der Entwickler dieser Bibliothek und die Community der Enthusiasten ständig bemüht sind, die Benutzerfreundlichkeit von React aus Sicht eines Programmierers zu verbessern. Das Auftreten von Haken, die absolut jedem empfohlen werden, ist eines der hellsten Beispiele für ein solches Streben.

Wir hoffen, dass die in Apollo Client eingeführten React Hooks diejenigen ansprechen, die dieses Projekt zur Entwicklung ihrer Anwendungen verwenden.

Liebe Leser! Verwenden Sie Apollo Client?

Source: https://habr.com/ru/post/de463331/


All Articles