Skip to content

Commit cd91357

Browse files
docs(vue-query): update SSR guide for nuxt2 (#8001)
* docs: update SSR guide for nuxt2 * ci: apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
1 parent 2be2a79 commit cd91357

File tree

1 file changed

+34
-16
lines changed
  • docs/framework/vue/guides

1 file changed

+34
-16
lines changed

docs/framework/vue/guides/ssr.md

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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`
100103
module.exports = {
101104
...
102105
plugins: ['~/plugins/vue-query.js'],
103-
};
106+
}
104107
```
105108

106109
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`.
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
130133
export 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

Comments
 (0)