Integrazione di un'API GraphQL con React usando Apollo Client
Integrare un’API GraphQL con React utilizzando Apollo Client ti permette di sfruttare la potenza di GraphQL per gestire i dati in modo efficiente all’interno di un’applicazione React. Apollo Client è la libreria più popolare per interfacciarsi con un’API GraphQL in un ambiente React, offrendo funzionalità avanzate come caching, gestione degli errori, aggiornamenti in tempo reale e molto altro.
In questa guida, ti mostrerò come configurare Apollo Client in un’applicazione React e come utilizzare GraphQL per eseguire query e mutazioni.
Prerequisiti
Prima di iniziare, assicurati di avere:
- Node.js e npm installati
- Create React App installato (
npx create-react-app
) - Conoscenza di base di React e GraphQL
- Un’API GraphQL già funzionante (puoi utilizzare un server GraphQL configurato con Apollo Server)
Step 1: Creazione di un Progetto React
Se non hai giĂ un progetto React, puoi crearne uno nuovo utilizzando Create React App:
npx create-react-app my-react-app
cd my-react-app
Step 2: Installazione di Apollo Client
Per integrare Apollo Client in React, installa le seguenti dipendenze:
npm install @apollo/client graphql
- @apollo/client: La libreria principale di Apollo Client per React.
- graphql: La libreria necessaria per eseguire query e mutazioni GraphQL.
Step 3: Configurazione di Apollo Client in React
Configurazione di Apollo Provider
Crea un file chiamato ApolloProvider.js
nella cartella src
per configurare Apollo Client:
import React from "react";
import {
ApolloClient,
InMemoryCache,
ApolloProvider as Provider,
} from "@apollo/client";
const client = new ApolloClient({
uri: "http://localhost:4000/graphql", // Sostituisci con il tuo endpoint GraphQL
cache: new InMemoryCache(),
});
const ApolloProvider = ({ children }) => {
return <Provider client={client}>{children}</Provider>;
};
export default ApolloProvider;
Integrazione di ApolloProvider nell’App
Importa e utilizza ApolloProvider
nel file index.js
per avvolgere l’intera applicazione React:
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import ApolloProvider from "./ApolloProvider";
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<ApolloProvider>
<React.StrictMode>
<App />
</React.StrictMode>
</ApolloProvider>
);
Questo passaggio assicura che l’intera applicazione React abbia accesso ad Apollo Client per eseguire query e mutazioni.
Step 4: Creazione e Utilizzo delle Query GraphQL
Ora che Apollo Client è configurato, puoi iniziare a creare e utilizzare query GraphQL all’interno dei componenti React.
Esempio di Query per Ottenere Dati
Supponiamo di voler eseguire una query per ottenere una lista di utenti dal server GraphQL.
- Definisci la Query in un Componente React: Crea un nuovo componente
Users.js
:
import React from "react";
import { useQuery, gql } from "@apollo/client";
const GET_USERS = gql`
query GetUsers {
users {
id
name
email
}
}
`;
function Users() {
const { loading, error, data } = useQuery(GET_USERS);
if (loading) return <p>Loading...</p>;
if (error) return <p>Error: {error.message}</p>;
return (
<ul>
{data.users.map((user) => (
<li key={user.id}>
{user.name} - {user.email}
</li>
))}
</ul>
);
}
export default Users;
- Utilizza il Componente nel Componente Principale (
App.js
):
import React from "react";
import Users from "./Users";
function App() {
return (
<div className="App">
<h1>Users List</h1>
<Users />
</div>
);
}
export default App;
Spiegazione del Codice
- useQuery: Un hook fornito da Apollo Client per eseguire query GraphQL e gestire lo stato di caricamento, errori e dati.
- gql: Una funzione per scrivere query GraphQL in modo leggibile all’interno del codice JavaScript.
Step 5: Gestione delle Mutazioni
Le mutazioni GraphQL sono utilizzate per modificare i dati sul server, come aggiungere, aggiornare o eliminare record.
Esempio di Mutazione per Aggiungere un Utente
- Definisci la Mutazione in un Componente React: Crea un nuovo componente
AddUser.js
:
import React, { useState } from "react";
import { useMutation, gql } from "@apollo/client";
const ADD_USER = gql`
mutation AddUser($name: String!, $email: String!) {
createUser(name: $name, email: $email) {
id
name
email
}
}
`;
function AddUser() {
const [name, setName] = useState("");
const [email, setEmail] = useState("");
const [addUser, { data, loading, error }] = useMutation(ADD_USER);
const handleSubmit = (e) => {
e.preventDefault();
addUser({ variables: { name, email } });
};
if (loading) return <p>Loading...</p>;
if (error) return <p>Error: {error.message}</p>;
return (
<form onSubmit={handleSubmit}>
<input
type="text"
placeholder="Name"
value={name}
onChange={(e) => setName(e.target.value)}
/>
<input
type="email"
placeholder="Email"
value={email}
onChange={(e) => setEmail(e.target.value)}
/>
<button type="submit">Add User</button>
</form>
);
}
export default AddUser;
- Utilizza il Componente
AddUser
inApp.js
:
import React from "react";
import Users from "./Users";
import AddUser from "./AddUser";
function App() {
return (
<div className="App">
<h1>Users List</h1>
<Users />
<h2>Add a new user</h2>
<AddUser />
</div>
);
}
export default App;
Spiegazione del Codice
- useMutation: Un hook fornito da Apollo Client per eseguire mutazioni GraphQL. Funziona in modo simile a
useQuery
, ma permette di inviare dati al server. - gql: Viene utilizzato per definire la mutazione GraphQL.
Step 6: Caching e Aggiornamenti in Tempo Reale
Caching Automatica
Apollo Client include un sistema di caching automatico che riduce il numero di richieste HTTP eseguite e migliora le prestazioni dell’applicazione.
Quando esegui una mutazione che modifica i dati memorizzati nella cache, Apollo Client aggiornerĂ automaticamente la cache se la mutazione restituisce i dati rilevanti.
Aggiornamento Manuale della Cache
In alcuni casi, potresti voler aggiornare manualmente la cache dopo una mutazione. Puoi farlo utilizzando la funzione update
di useMutation
:
const [addUser] = useMutation(ADD_USER, {
update(cache, { data: { createUser } }) {
const { users } = cache.readQuery({ query: GET_USERS });
cache.writeQuery({
query: GET_USERS,
data: { users: users.concat([createUser]) },
});
},
});
Conclusione
In questa guida, hai imparato a integrare un’API GraphQL con un’applicazione React utilizzando Apollo Client. Hai visto come configurare Apollo Client, eseguire query e mutazioni, e gestire la cache e gli aggiornamenti in tempo reale. Questa configurazione ti permette di sfruttare appieno la potenza di GraphQL all’interno di React, creando applicazioni interattive, scalabili e facili da mantenere.
Utilizzando Apollo Client, puoi migliorare significativamente l’efficienza della tua applicazione React, riducendo il numero di richieste al server e migliorando la gestione dei dati. Con queste conoscenze, sei pronto per sviluppare applicazioni moderne e reattive con React e GraphQL.