В приложении Next.js выборка данных может быть сложной в зависимости от варианта использования приложения. Хотя Next.js предоставляет несколько методов выборки данных (SSR, SSG, CSR и т. д.), иногда необходимо оптимизировать процесс выборки данных, чтобы уменьшить количество запросов и повысить производительность. Один из способов добиться этого — реализовать кэширование.
Решение. Клиент Apollo — популярный выбор для управления данными и состоянием в приложении Next.js. Он обеспечивает эффективное кэширование, которое помогает избежать ненужных сетевых запросов и повышает производительность. В этом руководстве мы покажем, как интегрировать клиент Apollo с API GraphQL и как реализовать кэширование в приложении Next.js.
Итак, начнем. Я привожу простое пошаговое решение для установки graphql и извлечения данных и показываю его в nextjs, конечно, в этой статье я не все рассмотрел, и это очень простая его реализация. но это хорошо для начала
Шаги:
- Установите и настройте клиент Apollo.
- Установите пакет
@apollo/client
с помощью npm или yarn. - Создайте экземпляр клиента Apollo и настройте его для подключения к вашему GraphQL API.
- Оберните приложение Next.js компонентом ApolloProvider, который предоставляет экземпляр клиента всем компонентам.
// lib/apolloClient.js import { ApolloClient, InMemoryCache } from '@apollo/client'; export const client = new ApolloClient({ uri: '/api/graphql', cache: new InMemoryCache() // this is very important and this will tell apollo to cache data in memory }); // pages/_app.js import { ApolloProvider } from '@apollo/client'; import { client } from '../lib/apolloClient'; export default function MyApp({ Component, pageProps }) { return ( <ApolloProvider client={client}> <Component {...pageProps} /> </ApolloProvider> ); }
2. Реализуйте кеширование
- Клиент Apollo автоматически кэширует ответы от API GraphQL на основе используемых запросов.
- Чтобы реализовать кэширование, мы можем указать время жизни (TTL) для конкретных запросов, используя параметр
fetchPolicy
. - Параметр
fetchPolicy
может иметь значение «сначала кеш», «кэш-и-сеть», «только кеш», «только сеть» или «без кэша». - «Cache-first» — рекомендуемый вариант для данных, которые не изменяются часто и должны кэшироваться для оптимальной производительности.
import { gql } from '@apollo/client'; import { useQuery } from '@apollo/client'; const POSTS_QUERY = gql` query Posts { posts { title description author { name } image } } `; function Posts({ ttl }) { const { loading, error, data } = useQuery(POSTS_QUERY, { fetchPolicy: 'cache-first', ...(ttl && { context: { ttl } }), }); if (loading) return <p>Loading...</p>; if (error) return <p>Error: {error.message}</p>; return ( <ul> {data.posts.map((post) => ( <li key={post.title}> <h2>{post.title}</h2> <p>{post.description}</p> <p>{post.author.name}</p> <img src={post.image} alt={post.title} /> </li> ))} </ul> ); }
3. Запросить данные из GraphQL API
- В ваших компонентах Next.js вы можете использовать хук
useQuery
для запроса данных из API GraphQL. - Клиент Apollo автоматически кэширует ответы на основе используемых запросов.
function Home() { return ( <> <h1>Blog Posts</h1> <Posts /> </> ); }
Вот и все! С помощью этих шагов вы сможете интегрировать Apollo Client с вашим приложением Next.js и внедрить кэширование для оптимизации производительности.
Другие полезные ссылки
Дополнительные материалы на PlainEnglish.io.
Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .
Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.