@@ -82,11 +82,14 @@ export default (context) => {
82
82
const queryClient = new QueryClient ({
83
83
defaultOptions: { queries: { staleTime: 5000 } },
84
84
})
85
- const options = { queryClient }
86
85
87
- Vue .use (VueQueryPlugin, options)
86
+ if (process .server ) {
87
+ context .ssrContext .VueQuery = queryClient
88
+ }
88
89
89
90
if (process .client ) {
91
+ Vue .use (VueQueryPlugin, { queryClient })
92
+
90
93
if (context .nuxtState && context .nuxtState .vueQueryState ) {
91
94
hydrate (queryClient, context .nuxtState .vueQueryState )
92
95
}
@@ -100,7 +103,7 @@ Add this plugin to your `nuxt.config.js`
100
103
module .exports = {
101
104
...
102
105
plugins: [' ~/plugins/vue-query.js' ],
103
- };
106
+ }
104
107
```
105
108
106
109
Now 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`.
110
113
- Prefetch all the queries that you need with ` queryClient.prefetchQuery ` or ` suspense `
111
114
- Dehydrate ` queryClient ` to the ` nuxtContext `
112
115
113
- ``` js
116
+ ``` vue
114
117
// pages/todos.vue
115
118
<template>
116
119
<div>
@@ -124,30 +127,45 @@ import {
124
127
defineComponent,
125
128
onServerPrefetch,
126
129
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'
129
132
130
133
export default defineComponent({
131
134
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
+
132
141
// 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
+ )
134
149
// 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
+ )
139
157
140
158
onServerPrefetch(async () => {
141
- await suspense ();
142
- ssrContext .nuxt .vueQueryState = dehydrate (queryClient);
143
- });
159
+ await suspense()
160
+ ssrContext.nuxt.vueQueryState = dehydrate(queryClient)
161
+ })
144
162
145
163
return {
146
164
refetch,
147
165
data,
148
- };
166
+ }
149
167
},
150
- });
168
+ })
151
169
</script>
152
170
```
153
171
0 commit comments