Sign up for Hasura Newsletter
Loading...

ApolloでGraphQLクライアントをセットアップする

Apolloは適切に抽象化されたレイヤーと、GraphQLサーバーとのインターフェースを提供します。axiosfetch で行ってきたような、リクエストボディ、ヘッダー、オプションを使ってクエリを構築するような煩わしい作業の必要ありません。GraphQLで直接クエリやミューテーションを記述でき、それらは自動的にApolloクライアントインスタンスを経由してサーバーに送信されます。

React Apollo Hooksのインストール

まずは、Apollo ClientとPeer Graphql Dependenciesをインストールします。

$ npm install @apollo/client graphql

Apollo Clientインスタンスの作成

src/components/App.js を開いて、コードの初めに以下のimportコードを追加します。

githubsrc/components/App.js
import React from 'react';
import Header from './Header';
import TodoPrivateWrapper from './Todo/TodoPrivateWrapper';
import TodoPublicWrapper from './Todo/TodoPublicWrapper';
import OnlineUsersWrapper from './OnlineUsers/OnlineUsersWrapper';
+ import { ApolloClient, ApolloProvider, InMemoryCache, HttpLink } from '@apollo/client';
import { useAuth0 } from "./Auth/react-auth0-spa";
const App = ({ idToken }) => {
const { loading, logout } = useAuth0();
if (loading) {
return <div>Loading...</div>;
}
return (
<div>
<Header logoutHandler={logout} />
<div className="row container-fluid p-left-right-0 m-left-right-0">
<div className="row col-md-9 p-left-right-0 m-left-right-0">
<div className="col-md-6 sliderMenu p-30">
<TodoPrivateWrapper />
</div>
<div className="col-md-6 sliderMenu p-30 bg-gray border-right">
<TodoPublicWrapper />
</div>
</div>
<div className="col-md-3 p-left-right-0">
<div className="col-md-12 sliderMenu p-30 bg-gray">
<OnlineUsersWrapper />
</div>
</div>
</div>
</div>
);
};
export default App;

これらは、Apollo Dependenciesを開始するために必要です。次に、httplinkとcacheを利用してApollo Clientを返す関数を定義します。

import { ApolloClient, ApolloProvider, InMemoryCache, HttpLink } from '@apollo/client';
+ const createApolloClient = (authToken) => {
+ return new ApolloClient({
+ link: new HttpLink({
+ uri: 'https://hasura.io/learn/graphql',
+ headers: {
+ Authorization: `Bearer ${authToken}`
+ }
+ }),
+ cache: new InMemoryCache(),
+ });
+ };

App 内にApollo Clientを作成して、client propを <ApolloProvider> コンポーネントに渡します。

const App = ({ idToken }) => {
const { loading, logout } = useAuth0();
if (loading) {
return <div>Loading...</div>;
}
+ const [client] = useState(createApolloClient(idToken));
return (
+ <ApolloProvider client={client}>
<div>
</div>
+ </ApolloProvider>
);
};

ここで何が起こっているのかを理解しておきましょう。

HttpLinkとInMemoryCache

ここでは、ApolloClientをGraphQLサーバーに接続するための HttpLink を作成します。ご存知の通り、GraphQLサーバーは https://hasura.io/learn/graphql の下で動作しています。

最後に、HttpLinkと InMemoryCache (推奨キャッシュソリューション)の新しいインスタンスを渡すことで、AppolloClientをインスタンス化します。これらすべてを関数にラップすると、Clientを返してくれます。

この関数は App コンポーネント内で利用します。

Did you find this page helpful?
Start with GraphQL on Hasura for Free
  • ArrowBuild apps and APIs 10x faster
  • ArrowBuilt-in authorization and caching
  • Arrow8x more performant than hand-rolled APIs
Promo
footer illustration
Brand logo
© 2024 Hasura Inc. All rights reserved
Github
Titter
Discord
Facebook
Instagram
Youtube
Linkedin