私のアプリでは、次のNPMモジュールを使用して Strapi 、 GraphQL および- Next.js :
次のステップでは、以下の例のようにApollo構成ファイルを作成しています。
_import { HttpLink } from "apollo-link-http";
import { withData } from "next-apollo";
const config = {
link: new HttpLink({
uri: "http://localhost:1337/graphql",
})
};
export default withData(config);
_
次に、クラスコンポーネント内で、静的メソッドgetInitialProps()
を使用して、GraphQLクエリを介してStrapiからデータをフェッチしています。
すべては問題ありませんが、Reactフックまたは他の方法で別のより良い方法があるでしょうか?
Next.jsとGraphQL用のもう1つのNiceフックソリューションを見つけました。
共有したいと思います。はじめましょう。
注:私は、Next.jsアプリケーションがすでにインストールされていることを前提としています。そうでない場合は、これに従ってください ガイド 。
このソリューションを構築するには、次のものが必要です。
1。npmコマンドを実行します。
npm install --save @apollo/react-hooks apollo-cache-inmemory apollo-client apollo-link-http graphql graphql-tag isomorphic-unfetch next-with-apollo
2。Appolo設定ファイルを作成します。フォルダ./config
にあり、appollo.js
と呼びます。以下のファイルコード:
import { ApolloClient } from "apollo-client";
import { InMemoryCache } from "apollo-cache-inmemory";
import withApollo from "next-with-apollo";
import { createHttpLink } from "apollo-link-http";
import fetch from "isomorphic-unfetch";
const GRAPHQL_URL = process.env.BACKEND_URL || "https://api.graphql.url";
const link = createHttpLink({
fetch,
uri: GRAPHQL_URL
});
export default withApollo(
({ initialState }) =>
new ApolloClient({
link: link,
cache: new InMemoryCache()
.restore(initialState || {})
})
);
3。以下のコードを使用して、_app.js
フォルダに./pages
ファイル(ラッパーの一種)を作成します。
import React from "react";
import Head from "next/head";
import { ApolloProvider } from "@apollo/react-hooks";
import withData from "../config/apollo";
const App = ({ Component, pageProps, apollo }) => {
return (
<ApolloProvider client={apollo}>
<Head>
<title>App Title</title>
</Head>
<Component {...pageProps} />
</ApolloProvider>
)
};
export default withData(App);
4。再利用可能なクエリコンポーネントを作成します。 ./components/query.js
import React from "react";
import { useQuery } from "@apollo/react-hooks";
const Query = ({ children, query, id }) => {
const { data, loading, error } = useQuery(query, {
variables: { id: id }
});
if (loading) return <p>Loading...</p>;
if (error) return <p>Error: {JSON.stringify(error)}</p>;
return children({ data });
};
export default Query;
5。GraphQLを介してフェッチされたデータのコンポーネントを作成します
import React from "react";
import Query from "../components/query";
import GRAPHQL_TEST_QUERY from "../queries/test-query";
const Example = () => {
return (
<div>
<Query query={GRAPHQL_TEST_QUERY} id={null}>
{({ data: { graphqlData } }) => {
return (
<div>
{graphqlData.map((fetchedItem, i) => {
return (
<div key={fetchedItem.id}>
{fetchedItem.name}
</div>
);
})}
</div>
);
}}
</Query>
</div>
);
};
export default Example;
6。./queries/test-query
内にGraphQLクエリを作成します。 注:GraphQLを介してサンプルデータとプロパティid
およびname
にアクセスできると想定しています
import gql from "graphql-tag";
const GRAPHQL_TEST_QUERY = gql`
query graphQLData {
exampleTypeOfData {
id
name
}
}
`;
export default GRAPHQL_TEST_QUERY;
7。結果を表示するには、以下のコードを使用してindex.js
フォルダーに./pages
ファイル(ホームページ)を作成します。
import Example from './components/example';
const Index = () => <div><Example /></div>
export default Index;
それがすべてです。このソリューションを好きなように楽しんで拡張してください。
apollo-server-micro と lodash を使用して、もう1つの興味深いソリューションを見つけました
クイックガイド:
next.jsアプリ(例名:next-app)を作成し、必要なパッケージをインストールします
npm i apollo-server-micro lodash
next.jsアプリで必要なファイルを作成します(next-app)
index.jsにコードを追加する
import { ApolloServer } from 'apollo-server-micro';
import resolvers from './resolvers';
import typeDefs from './TypeDef';
const apolloServer = new ApolloServer({
typeDefs,
resolvers,
});
export const config = {
api: {
bodyParser: false
}
};
export default apolloServer.createHandler({ path: '/api/graphql' });
typeDefs.jsにコードを追加する
import { gql } from 'apollo-server-micro';
const typeDefs = gql`
type User {
id: Int!
name: String!
age: Int
active: Boolean!
}
type Query {
getUser(id: Int): User
}
`;
export default typeDefs;
resolvers.jsにコードを追加する
import lodash from 'lodash/collection';
const users = [
{ id: 1, name: 'Mario', age: 38, active: true },
{ id: 2, name: 'Luigi', age: 40, active: true},
{ id: 3, name: 'Wario', age: 36, active: false }
];
const resolvers = {
Query: {
getUser: (_, { id }) => {
return lodash.find(users, { id });
}
}
};
export default resolvers;
以下のコマンドを実行し、graphql URLをチェックして、Next.jsアプリ(next-app)をテストします http:// localhost:3000/api/graphql
npm run dev