Introduktion till Apollo Client med React for GraphQL

GraphQL har blivit populärt nyligen och kommer sannolikt att ersätta resten API. I den här handledningen använder vi Apollo Client för att kommunicera med GitHubs GraphQL API. Vi kommer att integrera Apollo Client med ReactJS, men du kan använda den med flera andra klientplattformar också.

Denna handledning täcker inte hur man startar ett React-projekt, men du kan använda skapa reagera-app för att starta.

När vi har reagera appen klar att gå, är nästa sak att installera de nödvändiga modulerna.

Installera moduler

Följande rad installerar alla nödvändiga moduler.

npm installera apollo-klientens förinställda reagera-apollo graphql-tag graphql -save

Nu kan vi tillhandahålla vår komponent med en klient.

Att tillhandahålla en kund till en komponent

Du kan ge en klient någonstans i din React-komponenthierarki. Det är dock alltid en bra praxis att tillhandahålla komponenten, förpackning hela applikationen, med kunden.

Import Reakt från "reagera"; Importera ReactDOM från 'react-dom'; importera app från './App'; importera ApolloProvider från "reagera apollo"; importera ApolloClient från "apollo-client"; importera HttpLink från "apollo-link-http"; importera InMemoryCache från "apollo-cache-inmemory"; const token = "YOUR_TOKEN"; const httpLink = uri: 'https://api.github.com/graphql', rubriker: behörighet: 'Bearer $ token'; const klient = ny ApolloClient (länk: ny HttpLink (httpLink), cache: ny InMemoryCache ()); ReactDOM.render (, document.getElementById ( 'root')); 

Ovan kan du se att vi definierade uri för GitHub och använde också en specifik token för headers. Du borde använda din egen token genererad från GitHub. Så glöm inte att byta ut det med YOUR_TOKEN.

I det här exemplet definierade vi API-token på klientsidan. Du bör dock inte avslöja ditt API-token offentligt. Så det är alltid bra att hålla det på servern abstraherad från klientsidan.

Lägg märke till att vi har packat in  komponent med ApolloProvider och använde klient variabel som vi skapade för klient stötta.

GraphiQL Application

Innan du dyker in i frågorna vill jag påpeka att det finns ett mycket användbart verktyg som heter GraphiQL för att testa dina GraphQL-frågor. Innan du fortsätter, se till att du har laddat ner den. 

När du har öppnat GraphiQL måste du ställa in GraphQL Endpoint och HTTP-huvuden.

GraphQL slutpunkt: https://api.github.com/graphql

Rubriknamn: Tillstånd

Rubrikvärde: Bärare YOUR_TOKEN

Självklart måste du byta ut YOUR_TOKEN med din egen token. Glöm inte att inkludera Bärare framför din token när du definierar Rubrikvärde.

Om du inte vill ladda ner ett program kan du också använda online GraphQL API Explorer för GitHub.

GraphQL-frågor

Till skillnad från ett REST API med flera slutpunkter, har GraphQL API endast en slutpunkt, och du hämtar bara det som definieras av din fråga.

Dokumentationen av GitHubs GraphQL API ger dig mer insikt.

Den bästa delen av GraphiQL-applikationen är också att den ger dig tillgång till dokumentation för frågor direkt inuti programmet. Du kan se sidofältet till höger heter Dokument.

Låt oss börja med den enklaste frågan:

fråga tittare inloggning

Den här frågan returnerar användarens inloggningsinformation. I det här fallet är tittaren dig sedan du använde din egen API-token.

I denna handledning kommer jag inte att ge detaljerad information om frågor. Du kan alltid referera till dokumentationen och försöka få frågor om GraphQL-verktyg för att se om du får rätt data.

Låt oss använda följande fråga för resten av handledningen.

fråga ($ namn: String!) sök (fråga: $ namn, sista: 10, typ: REPOSITORY) kanter node ... på Repository id namnbeskrivning url

Den här frågan söker efter de senaste 10 repositoriesna som matchar den specifika inmatningssträngen, som vi definierar i vår applikation.

Den returnerar idnamnbeskrivning, och url för varje resultat.

Använda GraphQL Query i en React Component

Vi måste importera de två modulerna nedan till vår React-komponent för att kunna definiera frågan inom komponenten och sedan överföra resultaten till komponenten som rekvisita.

importera gql från 'graphql-tag'; importera graphql från "reagera-apollo";

Här tilldelade vi vår fråga till en konstant variabel, men vi har inte definierat namn parameter ännu.

repetition rep

Nu sätter vi in ​​vår komponent med graphql HOC (Higher Order Component) för att definiera sökparametrarna, utföra frågan och sedan skicka resultatet som rekvisita till vår komponent.

const AppWithData = graphql (repoQuery, alternativ: variabler: namn: "tuts") (App)

Nedan är den slutliga versionen av vår komponent.

Importreakt, Komponent från "reagera"; importera gql från 'graphql-tag'; importera graphql från "reagera-apollo"; klass App utökar komponent render () return ( 
); const quote const AppWithData = graphql (repoQuery, options: variabler: name: "tuts") (App) exportera standard AppWithData;

Observera att vi inte exporterar själva App komponent men den inslagna komponenten, vilken är AppWithData.

Kontrollera data i konsolen

Låt oss fortsätta och lägga till console.log (this.props) till komponentens renderingsmetod.

klass App utökar komponent render () console.log (this.props) returnera ( 
);

När du kontrollerar din webbläsares konsol ser du att det finns två objektloggar.

Inuti varje objekt ser du data fast egendom. Detta tillhandahålls till vår komponent genom graphql HOC.

Observera att den första loggen har loading: true egendom inomhus data, och den andra loggen har loading: false och ett nytt objekt som heter Sök, vilket är exakt de uppgifter vi ville få.

Visa data

Låt oss skriva lite JSX för att visa den hämtade data.

Sedan Sök objektet är inte ursprungligen där, vi kan inte direkt försöka göra det. Därför måste vi först kontrollera om vi hämtade data och Sök objektet är klart att användas.

För att göra det ska vi helt enkelt använda läser in information som tillhandahålls inuti data fast egendom.

Om läser in är Sann då gör vi helt enkelt Läser in text, annars själva data.

klass App utökar komponent render () return ( 
this.props.data.loading === true? "Laddar": this.props.data.search.edges.map (data =>
  • Data.node.name
  • Data.node.description
)
);

Jag använde ?: ternär operatör för grundläggande inline villkorliga uttryck. Om läser in är Sann vi visar Läser in,och om det är felaktigt använder vi kartfunktionen för att iterera genom vår datarray för att visa informationen inuti 

    och 
  • element.

    Detta är bara ett grundläggande exempel. Du kan använda ett regelbundet if-else-meddelande och returnera olika resultat för din renderingsmetod.

    Du kan kolla Apollo-Client-with-React-arkivet, klona det på din dator och spela runt.

    P.S. Glöm inte att byta ut tecken variabel med din egen API-token för GitHub.

    Slutsats

    Vi omfattade hur man började med Apollo Client for React. Vi installerade de nödvändiga modulerna, konfigurerar klienten och gav den till vår komponent överst i komponenthierarkin. Vi lärde oss hur man testar GraphQL-frågor snabbt innan de implementeras i vår faktiska applikation. Slutligen integrerade vi frågan i en React-komponent och visade den hämtade data.