This course is no longer maintained and may be out-of-date. While it remains available for reference, its content may not reflect the latest updates, best practices, or supported features.
Configurar un cliente GraphQL con Apollo
Apollo ofrece una capa de abstracción clara y una interfaz para su servidor GraphQL. No necesitará preocuparse por la construcción de sus consultas con el cuerpo para solicitudes, los encabezados y las opciones, como habría hecho, pongamos, con axios
o fetch
. Puede escribir consultas y mutaciones directamente en GraphQL y serán enviadas automáticamente a su servidor mediante su instancia del cliente apollo.
Instalación de hooks Apollo con React
Vamos a empezar por instalar las dependencias del cliente apollo y de los pares graphql:
$ npm install @apollo/client graphql
Cree la instancia del cliente Apollo
Abra src/components/App.js
y añada las siguientes importaciones en la parte superior:
import React from 'react';import Header from './Header';import TodoPrivateWrapper from './Todo/TodoPrivateWrapper';import TodoPublicWrapper from './Todo/TodoPublicWrapper';import OnlineUsersWrapper from './OnlineUsers/OnlineUsersWrapper';+ import { ApolloClient, ApolloProvider, InMemoryCache, HttpLink } from '@apollo/client';import { useAuth0 } from "./Auth/react-auth0-spa";const App = ({ idToken }) => {const { loading, logout } = useAuth0();if (loading) {return <div>Loading...</div>;}return (<div><Header logoutHandler={logout} /><div className="row container-fluid p-left-right-0 m-left-right-0"><div className="row col-md-9 p-left-right-0 m-left-right-0"><div className="col-md-6 sliderMenu p-30"><TodoPrivateWrapper /></div><div className="col-md-6 sliderMenu p-30 bg-gray border-right"><TodoPublicWrapper /></div></div><div className="col-md-3 p-left-right-0"><div className="col-md-12 sliderMenu p-30 bg-gray"><OnlineUsersWrapper /></div></div></div></div>);};export default App;
Estas son las dependencias de apollo necesarias para empezar. Ahora vamos a definir una función que devolverá el cliente apollo con httplink y caché.
import { ApolloClient, ApolloProvider, InMemoryCache, HttpLink } from '@apollo/client';+ const createApolloClient = (authToken) => {+ return new ApolloClient({+ link: new HttpLink({+ uri: 'https://hasura.io/learn/graphql',+ headers: {+ Authorization: `Bearer ${authToken}`+ }+ }),+ cache: new InMemoryCache(),+ });+ };
Cree el cliente apollo dentro de App
y pase el prop del cliente al componente <ApolloProvider>
.
const App = ({ idToken }) => {const { loading, logout } = useAuth0();if (loading) {return <div>Loading...</div>;}+ const [client] = useState(createApolloClient(idToken));return (+ <ApolloProvider client={client}><div></div>+ </ApolloProvider>);};
Vamos a tratar de comprender lo que está pasando aquí.
HttpLink e InMemoryCache
Estamos creando una HttpLink
para conectar ApolloClient con el servidor GraphQL. Como ya sabe, nuestro servidor GraphQL se ejecuta en https://hasura.io/learn/graphql
Al final, instanciamos ApolloClient pasando nuestro HttpLink y una nueva instancia de InMemoryCache
(solución de almacenamiento en caché recomendada). Lo rematamos todo con una función que nos devolverá el cliente.
Vamos a aprovechar esta función dentro del componente App
.
Build apps and APIs 10x faster
Built-in authorization and caching
8x more performant than hand-rolled APIs

