ReactとGraphQLを組み合わせることで、効率的なデータの取得と更新を実現することができます。GraphQLは柔軟で強力なクエリ言語であり、Reactは柔軟なUIコンポーネントを提供するため、両者を組み合わせることで、効率的なデータフェッチングと状態管理が可能になります。ここでは、ReactとGraphQLを組み合わせたデータの取得と更新を効率化する方法について解説します。
moun45.hatenablog.com
1. Apollo Clientを使用したデータの取得
Apollo Clientは、ReactアプリケーションでGraphQLクエリを実行し、データを取得するためのライブラリです。Apollo Clientを使用することで、GraphQLサーバーからデータを取得し、Reactコンポーネントに注入することができます。
import { ApolloClient, InMemoryCache, ApolloProvider, useQuery, gql } from '@apollo/client';
const client = new ApolloClient({
cache: new InMemoryCache()
});
const GET_BOOKS = gql`
query GetBooks {
books {
id
title
author
}
}
`;
const Books = () => {
const { loading, error, data } = useQuery(GET_BOOKS);
if (loading) return <p>Loading...</p>;
if (error) return <p>Error: {error.message}</p>;
return (
<ul>
{data.books.map(book => (
<li key={book.id}>{book.title} by {book.author}</li>
))}
</ul>
);
};
const App = () => (
<ApolloProvider client={client}>
<Books />
</ApolloProvider>
);
2. GraphQL Mutationを使用したデータの更新
GraphQL Mutationを使用することで、データの更新や作成などの変更操作をサーバーに送信することができます。Apollo Clientを使用して、GraphQL Mutationを実行し、データを更新します。
import { useMutation } from '@apollo/client';
const ADD_BOOK = gql`
mutation AddBook($title: String!, $author: String!) {
addBook(title: $title, author: $author) {
id
title
author
}
}
`;
const AddBookForm = () => {
let input;
const [addBook] = useMutation(ADD_BOOK);
return (
<form
onSubmit={e => {
e.preventDefault();
addBook({ variables: { title: input.value, author: 'Unknown' } });
}}
>
<input ref={node => { input = node; }} />
<button type="submit">Add Book</button>
</form>
);
};
3. データの更新と再取得
データの更新後、Apollo Clientは自動的にキャッシュを更新しますが、必要に応じて再取得することもできます。refetchQueries
オプションを使用して、特定のクエリを再取得することができます。
const [addBook] = useMutation(ADD_BOOK, {
refetchQueries: [{ query: GET_BOOKS }]
});
まとめ
ReactとGraphQLを組み合わせることで、データの取得と更新を効率化することができます。Apollo Clientを使用してGraphQLクエリを実行し、データを取得し、Mutationを使用してデータを更新します。また、Apollo Clientは自動的にキャッシュを管理し、必要に応じて再取得を行うため、柔軟なデータフェッチングと状態管理が可能になります。
moun45.hatenablog.com