×

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

Relay là một thư viện JavaScript phát triển bởi Facebook nhằm giúp các ứng dụng React dễ dàng quản lý dữ liệu động một cách hiệu quả và tối ưu hóa hiệu suất. Relay hoạt động tốt với GraphQL, cải thiện việc truy vấn dữ liệu từ server và giúp phát triển các ứng dụng web lớn dễ dàng hơn. Bài viết này sẽ hướng dẫn chi tiết cách cài đặt thư viện Relay trong JavaScript và những bước cơ bản bạn cần thực hiện để tích hợp Relay vào ứng dụng React của mình.

1. Tổng quan về Relay

Relay là gì?

Relay là một framework cho việc xây dựng các ứng dụng web hiện đại, cho phép bạn quản lý dữ liệu một cách hiệu quả bằng cách tận dụng GraphQL. Relay tự động hóa nhiều quá trình phức tạp như batching, caching, và mutating dữ liệu, giúp việc phát triển trở nên dễ dàng và tối ưu hơn.

Lợi ích của việc sử dụng Relay

  • Tích hợp mượt mà với React: Relay được thiết kế để làm việc tốt nhất với các component của React.
  • Tối ưu hóa dữ liệu: Relay tự động hóa việc tối ưu hóa truy vấn và quản lý cập nhật, giúp giảm tải cho máy chủ.
  • Xử lý phân trang dễ dàng: Relay có những cấu trúc sẵn có để xử lý phân trang và kết quả truy vấn lớn một cách mượt mà.

2. Cài đặt Relay trong dự án React

Cài đặt môi trường

Để sử dụng Relay trong dự án React, bạn cần phải cài đặt một số công cụ cơ bản. Đầu tiên, hãy chắc chắn rằng bạn đã cài đặt Node.js và npm.

Bắt đầu với create-react-app

Nếu bạn chưa có một dự án React sẵn có, bạn có thể tạo một dự án mới với create-react-app như sau:

npx create-react-app my-relay-app
cd my-relay-app

Cài đặt các gói Relay cần thiết

Relay bao gồm nhiều gói khác nhau, nhưng bạn có thể bắt đầu với một số gói cơ bản như relay-runtime, react-relay. Cài đặt chúng bằng npm hoặc yarn:

npm install relay-runtime react-relay

Cấu hình GraphQL

Để sử dụng Relay, bạn cần một server GraphQL. Có nhiều cách để thiết lập một server GraphQL, bạn có thể sử dụng Apollo Server, Express GraphQL hoặc bất kỳ server GraphQL nào khác.

3. Thiết lập Relay trong ứng dụng React

Tạo một cấu hình Relay Environment

Relay Environment là nơi chứa các thiết lập và cache được sử dụng bởi các component của Relay. Tạo một file relay-environment.js và cấu hình như sau:

import { Environment, Network, RecordSource, Store } from 'relay-runtime';

function fetchQuery(operation, variables) {
  return fetch('/graphql', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      query: operation.text,
      variables,
    }),
  }).then(response => {
    return response.json();
  });
}

const environment = new Environment({
  network: Network.create(fetchQuery),
  store: new Store(new RecordSource()), 
});

export default environment;

Sử dụng Relay Environment trong ứng dụng

Bạn cần cung cấp Relay Environment cho toàn bộ ứng dụng React của bạn. Chỉnh sửa index.js như sau:

import React from 'react';
import ReactDOM from 'react-dom';
import { RelayEnvironmentProvider } from 'react-relay';
import environment from './relay-environment';
import App from './App';

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

4. Tạo Truy vấn với Relay

Định nghĩa một Fragment Container

Fragments là khối truy vấn nhỏ mà bạn có thể sử dụng lại nhiều lần trong các component của bạn. Tạo một file MyComponent.js:

import React from 'react';
import { createFragmentContainer, graphql } from 'react-relay';

function MyComponent({ data }) {
  return (
    <div>
      <h1>{data.name}</h1>
      <p>{data.description}</p>
    </div>
  );
}

export default createFragmentContainer(MyComponent, {
  data: graphql`
    fragment MyComponent_data on MyType {
      name
      description
    }
  `,
});

Sử dụng Query Renderer

Query Renderer là component chịu trách nhiệm thực hiện truy vấn GraphQL và cung cấp dữ liệu cho các Fragment Container. Tạo file MyQueryRenderer.js:

import React from 'react';
import { QueryRenderer, graphql } from 'react-relay';
import environment from './relay-environment';
import MyComponent from './MyComponent';

const MyQueryRenderer = () => (
  <QueryRenderer
    environment={environment}
    query={graphql`
      query MyQueryRendererQuery {
        myType {
          ...MyComponent_data
        }
      }
    `}
    variables={{}}
    render={({ error, props }) => {
      if (error) {
        return <div>Error!</div>;
      }
      if (!props) {
        return <div>Loading...</div>;
      }
      return <MyComponent data={props.myType} />;
    }}
  />
);

export default MyQueryRenderer;

Sử dụng Query Renderer trong ứng dụng

Đến bước này, bạn có thể sử dụng Query Renderer trong App.js:

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

function App() {
  return (
    <div className="App">
      <MyQueryRenderer />
    </div>
  );
}

export default App;

5. Mutations với Relay

Tạo một mutation

Relay cung cấp cách để thực hiện mutations và cập nhật cache tự động. Tạo file MyMutation.js:

import { commitMutation, graphql } from 'react-relay';
import environment from './relay-environment';

const mutation = graphql`
  mutation MyMutation($input: MyMutationInput!) {
    myMutation(input: $input) {
      myType {
        id
        name
        description
      }
    }
  }
`;

function commit(input, onCompleted, onError) {
  return commitMutation(environment, {
    mutation,
    variables: {
      input
    },
    onCompleted,
    onError
  });
}

export default { commit };

Sử dụng mutation trong component

Bạn có thể sử dụng mutation trong component React của mình:

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

function MyComponent() {
  const handleClick = () => {
    const input = { /* dữ liệu mutation */ };
    MyMutation.commit(input, (response) => {
      console.log('Mutation completed', response);
    }, (error) => {
      console.log('Mutation error', error);
    });
  };

  return (
    <div>
      <button onClick={handleClick}>Execute Mutation</button>
    </div>
  );
}

export default MyComponent;

6. Kết luận

Việc cài đặt và sử dụng thư viện Relay trong ứng dụng React có thể giúp bạn quản lý dữ liệu hiệu quả hơn, tối ưu hóa query và giảm tải cho server. Từ việc cấu hình môi trường Relay, sử dụng Fragment Container và Query Renderer cho đến thực hiện mutations, bài viết này đã giới thiệu các bước cơ bản để bạn có thể bắt đầu với Relay. Hãy thử nghiệm và khám phá các tính năng mạnh mẽ khác của Relay để nâng cao chất lượng ứng dụng web của bạn.

Comments