×

Cài đặt thư viện Apollo Client trong JavaScript

Apollo Client là một thư viện mạnh mẽ và phổ biến cho việc quản lý các yêu cầu GraphQL trong các ứng dụng JavaScript, cho phép dễ dàng tương tác với API GraphQL. Bài viết này sẽ hướng dẫn chi tiết cách cài đặt và sử dụng Apollo Client trong project JavaScript của bạn, cùng với việc giải thích các khái niệm quan trọng và các tính năng chính của thư viện này.

1. Tổng Quan Về Apollo Client

Apollo Client là một thư viện JavaScript giúp dễ dàng quản lý các yêu cầu đến một API GraphQL và xử lý dữ liệu từ server. Nó cung cấp một bộ công cụ hoàn chỉnh để làm việc với GraphQL, bao gồm caching, local state management, và nhiều tính năng mạnh mẽ khác.

1.1 Lợi Ích Của Việc Sử Dụng Apollo Client

  • Caching Dữ Liệu: Apollo Client có cơ chế caching tích hợp, giúp cải thiện hiệu suất bằng cách lưu trữ các câu trả lời từ server và tránh việc gửi lại các yêu cầu giống nhau.
  • Quản Lý State Tốt Hơn: Thư viện này cho phép bạn quản lý không chỉ dữ liệu từ server mà còn các state local, giúp code của bạn sạch sẽ và dễ bảo trì.
  • Hỗ Trợ Hành Động Truy Vấn và Biến Đổi State: Apollo Client cung cấp các API mạnh mẽ để thực hiện những yêu cầu truy vấn dữ liệu và mutation.
  • Developer Tool: Apollo Client đi kèm với Apollo DevTools, hỗ trợ dễ dàng trong việc debug và phát triển ứng dụng.

2. Khởi Đầu Với Apollo Client

Để bắt đầu, chúng ta cần thiết lập project và cài đặt các dependencies cần thiết.

2.1 Tạo Project Mới

Nếu bạn chưa có project, bạn có thể tạo một project mới bằng cách sử dụng các công cụ như Create React App, Vue CLI, hoặc bằng tay với Node.js và npm/yarn.

npx create-react-app my-apollo-client-app
cd my-apollo-client-app

2.2 Cài Đặt Apollo Client Và Các Dependencies

Sử dụng npm hoặc yarn để cài đặt Apollo Client và các package liên quan:

npm install @apollo/client graphql

Hoặc nếu bạn dùng yarn:

yarn add @apollo/client graphql

2.3 Cấu Hình Apollo Client

Sau khi đã cài đặt các package cần thiết, chúng ta cần cấu hình Apollo Client. Code mẫu dưới đây cho thấy cách tạo một Apollo Client và cung cấp nó cho toàn bộ ứng dụng của bạn.

import React from 'react';
import ReactDOM from 'react-dom';
import { ApolloProvider, InMemoryCache, HttpLink, ApolloClient } from '@apollo/client';

const client = new ApolloClient({
  link: new HttpLink({
    uri: 'https://your-graphql-api-url',  // Thay thế URI này bằng URI của API GraphQL của bạn.
  }),
  cache: new InMemoryCache(),
});

ReactDOM.render(
  <ApolloProvider client={client}>
    <App />
  </ApolloProvider>,
  document.getElementById('root')
);

3. Tạo Các Truy Vấn (Queries) Với Apollo Client

Với cấu hình Apollo Client đã hoàn thành, chúng ta có thể bắt đầu tạo các thành phần React để thực hiện các truy vấn GraphQL.

3.1 Viết Truy Vấn GraphQL

Truy vấn GraphQL có thể được viết dưới dạng chuỗi hoặc sử dụng gói graphql-tag để tạo các truy vấn:

import { gql } from '@apollo/client';

const GET_DOGS = gql`
  {
    dogs {
      id
      breed
    }
  }
`;

3.2 Sử Dụng Hook useQuery Để Thực Hiện Truy Vấn

Apollo Client cung cấp hook useQuery để thực hiện các truy vấn một cách tiện lợi trong các thành phần React. Dưới đây là một ví dụ về cách sử dụng useQuery:

import React from 'react';
import { useQuery } from '@apollo/client';

const Dogs = () => {
  const { loading, error, data } = useQuery(GET_DOGS);

  if (loading) return <p>Loading...</p>;
  if (error) return <p>Error: {error.message}</p>;

  return (
    <ul>
      {data.dogs.map(dog => (
        <li key={dog.id}>{dog.breed}</li>
      ))}
    </ul>
  );
};

export default Dogs;

3.3 Hiển Thị Dữ Liệu

Bây giờ chúng ta có thể sử dụng thành phần Dogs trong ứng dụng của mình để hiển thị dữ liệu từ API GraphQL:

import React from 'react';
import Dogs from './Dogs';

const App = () => (
  <div>
    <h2>My first Apollo app 🚀</h2>
    <Dogs />
  </div>
);

export default App;

4. Tạo Các Biến Đổi (Mutations) Với Apollo Client

Bên cạnh các truy vấn, bạn cũng có thể thực hiện các biến đổi để thay đổi dữ liệu trên server.

4.1 Viết Mutation GraphQL

Mutation GraphQL tương tự như query, nhưng chúng thực hiện các thay đổi trạng thái trên server:

import { gql } from '@apollo/client';

const ADD_DOG = gql`
  mutation AddDog($name: String!, $breed: String!) {
    addDog(name: $name, breed: $breed) {
      id
      name
      breed
    }
  }
`;

4.2 Sử Dụng Hook useMutation Để Thực Hiện Mutation

Với hook useMutation, bạn có thể dễ dàng thực hiện mutation trong các component React:

import React, { useState } from 'react';
import { useMutation } from '@apollo/client';

const AddDog = () => {
  const [name, setName] = useState('');
  const [breed, setBreed] = useState('');
  const [addDog, { data, loading, error }] = useMutation(ADD_DOG);

  const handleSubmit = async (e) => {
    e.preventDefault();
    await addDog({ variables: { name, breed } });
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        placeholder="Name"
        value={name}
        onChange={(e) => setName(e.target.value)}
      />
      <input
        type="text"
        placeholder="Breed"
        value={breed}
        onChange={(e) => setBreed(e.target.value)}
      />
      <button type="submit">Add Dog</button>
      {loading && <p>Loading...</p>}
      {error && <p>Error: {error.message}</p>}
      {data && <p>Added Dog: {data.addDog.name}</p>}
    </form>
  );
};

export default AddDog;

5. Tích Hợp Apollo DevTools

Apollo DevTools là một extension của trình duyệt giúp bạn debug và phân tích các yêu cầu GraphQL của Apollo Client. Để cài đặt Apollo DevTools, bạn chỉ cần cài đặt extension từ Chrome Web Store hoặc Firefox Add-ons.

6. Kết Luận

Với Apollo Client, việc quản lý các yêu cầu GraphQL trở nên dễ dàng và hiệu quả hơn rất nhiều. Thư viện này không chỉ giúp bạn thực hiện các truy vấn và mutation một cách đơn giản, mà còn cung cấp các tính năng mạnh mẽ như caching và quản lý state.

Việc hiểu rõ và sử dụng Apollo Client có thể giúp bạn xây dựng các ứng dụng phản hồi nhanh, mạnh mẽ và dễ bảo trì. Hy vọng bài viết này đã giúp bạn có cái nhìn tổng quan và hướng dẫn cụ thể về cách cài đặt và sử dụng Apollo Client trong các dự án JavaScript của mình.

Comments