pages/_app: beautify apollo & query clients usages
This commit is contained in:
parent
6375bc8cb2
commit
9545095662
9
api/client.js
Normal file
9
api/client.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import { hydrate, QueryClient } from '@tanstack/react-query';
|
||||||
|
|
||||||
|
export default function initializeQueryClient(initialState) {
|
||||||
|
const client = new QueryClient();
|
||||||
|
|
||||||
|
hydrate(client, initialState);
|
||||||
|
|
||||||
|
return client;
|
||||||
|
}
|
||||||
@ -1,9 +0,0 @@
|
|||||||
/* eslint-disable import/prefer-default-export */
|
|
||||||
import { useMemo } from 'react';
|
|
||||||
import initializeApollo from './client';
|
|
||||||
|
|
||||||
export function useApollo(initialState) {
|
|
||||||
const client = useMemo(() => initializeApollo(initialState), [initialState]);
|
|
||||||
|
|
||||||
return client;
|
|
||||||
}
|
|
||||||
@ -1,9 +1,8 @@
|
|||||||
/* eslint-disable global-require */
|
/* eslint-disable global-require */
|
||||||
import { ApolloProvider } from '@apollo/client';
|
import { ApolloProvider } from '@apollo/client';
|
||||||
import { Hydrate, QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
import { QueryClientProvider } from '@tanstack/react-query';
|
||||||
import { ConfigProvider } from 'antd';
|
import { ConfigProvider } from 'antd';
|
||||||
import 'antd/dist/antd.less';
|
import 'antd/dist/antd.less';
|
||||||
import { useApollo } from 'apollo/hooks';
|
|
||||||
import Layout from 'Components/Layout';
|
import Layout from 'Components/Layout';
|
||||||
import type { AppProps } from 'next/app';
|
import type { AppProps } from 'next/app';
|
||||||
import Head from 'next/head';
|
import Head from 'next/head';
|
||||||
@ -17,14 +16,17 @@ import '../styles/fonts.css';
|
|||||||
import '../styles/globals.css';
|
import '../styles/globals.css';
|
||||||
|
|
||||||
import ruRU from 'antd/lib/locale/ru_RU';
|
import ruRU from 'antd/lib/locale/ru_RU';
|
||||||
|
import initializeQueryClient from 'api/client';
|
||||||
|
import initializeApollo from 'apollo/client';
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'development') {
|
if (process.env.NODE_ENV === 'development') {
|
||||||
require('../mocks');
|
require('../mocks');
|
||||||
}
|
}
|
||||||
|
|
||||||
function App({ Component, pageProps }: AppProps) {
|
function App({ Component, pageProps }: AppProps) {
|
||||||
const apolloClient = useApollo(pageProps.initialApolloState);
|
const { initialApolloState, initialQueryState } = pageProps;
|
||||||
const queryClient = useMemo(() => new QueryClient(), []);
|
const apolloClient = useMemo(() => initializeApollo(initialApolloState), [initialApolloState]);
|
||||||
|
const queryClient = useMemo(() => initializeQueryClient(initialQueryState), [initialQueryState]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ThemeProvider theme={theme}>
|
<ThemeProvider theme={theme}>
|
||||||
@ -39,11 +41,9 @@ function App({ Component, pageProps }: AppProps) {
|
|||||||
<ConfigProvider locale={ruRU}>
|
<ConfigProvider locale={ruRU}>
|
||||||
<ApolloProvider client={apolloClient}>
|
<ApolloProvider client={apolloClient}>
|
||||||
<QueryClientProvider client={queryClient}>
|
<QueryClientProvider client={queryClient}>
|
||||||
<Hydrate state={pageProps.queryDehydratedState}>
|
<Layout>
|
||||||
<Layout>
|
<Component {...pageProps} />
|
||||||
<Component {...pageProps} />
|
</Layout>
|
||||||
</Layout>
|
|
||||||
</Hydrate>
|
|
||||||
</QueryClientProvider>
|
</QueryClientProvider>
|
||||||
</ApolloProvider>
|
</ApolloProvider>
|
||||||
</ConfigProvider>
|
</ConfigProvider>
|
||||||
|
|||||||
@ -61,7 +61,6 @@ function Home() {
|
|||||||
|
|
||||||
export const getServerSideProps = async ({ req }) => {
|
export const getServerSideProps = async ({ req }) => {
|
||||||
const { cookie = '' } = req.headers;
|
const { cookie = '' } = req.headers;
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
const queryGetUser = () => getUser({
|
const queryGetUser = () => getUser({
|
||||||
headers: {
|
headers: {
|
||||||
@ -70,11 +69,9 @@ export const getServerSideProps = async ({ req }) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const queryClient = new QueryClient();
|
const queryClient = new QueryClient();
|
||||||
|
|
||||||
const user = await queryClient.fetchQuery(['user'], queryGetUser);
|
const user = await queryClient.fetchQuery(['user'], queryGetUser);
|
||||||
|
|
||||||
const apolloClient = initializeApollo();
|
const apolloClient = initializeApollo();
|
||||||
|
|
||||||
const { options: ownerOptions } = await getOwnerData(apolloClient, user);
|
const { options: ownerOptions } = await getOwnerData(apolloClient, user);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -83,7 +80,7 @@ export const getServerSideProps = async ({ req }) => {
|
|||||||
options: ownerOptions,
|
options: ownerOptions,
|
||||||
},
|
},
|
||||||
initialApolloState: apolloClient.cache.extract(),
|
initialApolloState: apolloClient.cache.extract(),
|
||||||
queryDehydratedState: dehydrate(queryClient),
|
initialQueryState: dehydrate(queryClient),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user