@@ -82,11 +82,14 @@ export default (context) => {
8282 const queryClient = new QueryClient ({
8383 defaultOptions: { queries: { staleTime: 5000 } },
8484 })
85- const options = { queryClient }
8685
87- Vue .use (VueQueryPlugin, options)
86+ if (process .server ) {
87+ context .ssrContext .VueQuery = queryClient
88+ }
8889
8990 if (process .client ) {
91+ Vue .use (VueQueryPlugin, { queryClient })
92+
9093 if (context .nuxtState && context .nuxtState .vueQueryState ) {
9194 hydrate (queryClient, context .nuxtState .vueQueryState )
9295 }
@@ -100,7 +103,7 @@ Add this plugin to your `nuxt.config.js`
100103module .exports = {
101104 ...
102105 plugins: [' ~/plugins/vue-query.js' ],
103- };
106+ }
104107```
105108
106109Now you are ready to prefetch some data in your pages with ` onServerPrefetch ` .
@@ -110,7 +113,7 @@ Now you are ready to prefetch some data in your pages with `onServerPrefetch`.
110113- Prefetch all the queries that you need with ` queryClient.prefetchQuery ` or ` suspense `
111114- Dehydrate ` queryClient ` to the ` nuxtContext `
112115
113- ``` js
116+ ``` vue
114117// pages/todos.vue
115118<template>
116119 <div>
@@ -124,30 +127,45 @@ import {
124127 defineComponent,
125128 onServerPrefetch,
126129 useContext,
127- } from " @nuxtjs/composition-api" ;
128- import { useQuery , useQueryClient , dehydrate } from " @tanstack/vue-query" ;
130+ } from ' @nuxtjs/composition-api'
131+ import { useQuery, useQueryClient, dehydrate } from ' @tanstack/vue-query'
129132
130133export default defineComponent({
131134 setup() {
135+ // Get QueryClient either from SSR context, or Vue context
136+ const { ssrContext } = useContext()
137+ // Make sure to provide `queryClient` as a second parameter to `useQuery` calls
138+ const queryClient =
139+ (ssrContext != null && ssrContext.VueQuery) || useQueryClient()
140+
132141 // This will be prefetched and sent from the server
133- const { refetch , data , suspense } = useQuery (" todos" , getTodos);
142+ const { data, refetch, suspense } = useQuery(
143+ {
144+ queryKey: ['todos'],
145+ queryFn: getTodos,
146+ },
147+ queryClient,
148+ )
134149 // This won't be prefetched, it will start fetching on client side
135- const { data2 } = useQuery (" todos2" , getTodos);
136-
137- const { ssrContext } = useContext ();
138- const queryClient = useQueryClient ();
150+ const { data2 } = useQuery(
151+ {
152+ queryKey: 'todos2',
153+ queryFn: getTodos,
154+ },
155+ queryClient,
156+ )
139157
140158 onServerPrefetch(async () => {
141- await suspense ();
142- ssrContext .nuxt .vueQueryState = dehydrate (queryClient);
143- });
159+ await suspense()
160+ ssrContext.nuxt.vueQueryState = dehydrate(queryClient)
161+ })
144162
145163 return {
146164 refetch,
147165 data,
148- };
166+ }
149167 },
150- });
168+ })
151169</script>
152170```
153171
0 commit comments