ReactとGraphQLを組み合わせた効率的なデータフェッチング

ReactとGraphQLを組み合わせた効率的なデータフェッチング

ReactとGraphQLを組み合わせることで、効率的かつ柔軟なデータフェッチングが可能になります。この記事では、ReactアプリケーションでGraphQLを活用し、APIからデータを取得する方法や、最適なデータ管理手法について説明します。

GraphQLとは何か?

GraphQLはAPIのクエリ言語であり、必要なデータのみを取得できます。これにより、オーバーフェッチやアンダーフェッチを防ぎます。

query {
  user(id: 1) {
    id
    name
    email
  }
}

ReactでGraphQLを使う準備

ReactアプリにGraphQLを導入するには、Apollo Clientがよく使われます。

npm install @apollo/client graphql

Apollo Clientのセットアップ

Apollo Clientを使用してGraphQLエンドポイントに接続します。

import { ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client';

const client = new ApolloClient({
  uri: 'https://example.com/graphql',
  cache: new InMemoryCache()
});

function App() {
  return (
    <ApolloProvider client={client}>
      <MyComponent />
    </ApolloProvider>
  );
}

GraphQLクエリを実行する

useQueryフックを使用してGraphQLクエリを実行します。

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

const GET_USER = gql`
  query GetUser($id: ID!) {
    user(id: $id) {
      id
      name
    }
  }
`;

function User() {
  const { loading, error, data } = useQuery(GET_USER, {
    variables: { id: 1 }
  });

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

  return <h1>{data.user.name}</h1>;
}

変数付きクエリ

GraphQLでは動的に変数を渡してデータを取得できます。

const { loading, error, data } = useQuery(GET_USER, {
  variables: { id: 2 }
});

ミューテーションの使用

データの追加や更新にはuseMutationフックを使用します。

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

const CREATE_USER = gql`
  mutation CreateUser($name: String!) {
    createUser(name: $name) {
      id
      name
    }
  }
`;

function AddUser() {
  const [createUser] = useMutation(CREATE_USER);

  return (
    <button onClick={() => createUser({ variables: { name: 'New User' } })}>
      Add User
    </button>
  );
}

データのキャッシュ管理

Apollo Clientはデフォルトでキャッシュを管理し、不要なリクエストを削減します。

エラーハンドリング

useQueryやuseMutationのエラーレスポンスを適切に処理します。

サブスクリプション

リアルタイムデータにはGraphQLのSubscriptionを使用します。

パフォーマンスの最適化

不要なリクエストを避け、キャッシュの有効活用が重要です。

プロジェクトへの適用

小規模プロジェクトではGraphQLを単純に統合し、大規模プロジェクトではデータ管理を適切に行います。

まとめ

ReactとGraphQLを組み合わせることで、効率的なデータフェッチングと柔軟なAPI操作が可能になります。