@@ -19,6 +19,18 @@ const route = useRoute('/users/[id]')
19
19
const simulateError = ref (false )
20
20
21
21
const enabled = ref (true )
22
+ const queryClient = useQueryClient ()
23
+ // queryClient.prefetchQuery({
24
+ // queryKey: ['user-id', computed(() => route.params.id)],
25
+ // // queryFn: async () => {
26
+ // // await delay(500)
27
+ // // return {
28
+ // // id: route.params.id,
29
+ // // name: 'Edu',
30
+ // // when: new Date().toUTCString(),
31
+ // // }
32
+ // // },
33
+ // }).then((val) => {})
22
34
23
35
// const tt = useQueries({
24
36
// queries: [
@@ -43,12 +55,17 @@ const {
43
55
error : tqError,
44
56
refetch,
45
57
} = useQuery ({
46
- async queryFn() {
58
+ async queryFn({ signal } ) {
47
59
console .log (' [TQ]useUserData' , route .fullPath )
60
+ signal .addEventListener (' abort' , (ev ) => {
61
+ // console.log('[TQ]useUserData aborted', ev)
62
+ })
48
63
await delay (500 )
49
64
if (simulateError .value ) {
50
65
throw new Error (' Simulated Error' )
51
66
}
67
+ signal .throwIfAborted ()
68
+ console .log (' ✅ returning data' )
52
69
const user = {
53
70
id: route .params .id ,
54
71
// @ts-expect-error: no param "name"!
@@ -58,29 +75,51 @@ const {
58
75
return user
59
76
},
60
77
queryKey: [' user-id' , computed (() => route .params .id )],
61
- staleTime: 5000 ,
78
+ staleTime: 0 ,
62
79
retry: false ,
63
- refetchOnMount: false ,
80
+ refetchOnMount: true ,
81
+ refetchOnWindowFocus(query ) {
82
+ console .log (' [TQ]refetchOnWindowFocus' , query )
83
+ return true
84
+ },
64
85
enabled ,
65
86
})
66
87
88
+ let _id = 0
89
+ function testRefetch() {
90
+ const id = ++ _id
91
+ console .log (id + ' refetch started' )
92
+ refetch ({ cancelRefetch: true , throwOnError: true }).then (res => {
93
+ console .log (id + ' refetch finished' , res )
94
+ }).catch (err => {
95
+ console .log (id + ' refetch error' , err )
96
+ }).finally (() => {
97
+ console .log (id + ' refetch finally' )
98
+ })
99
+ }
100
+
101
+
67
102
const {
68
103
data,
69
104
error,
70
105
mutate,
71
106
status : mutSate,
72
107
} = useMutation ({
73
- mutationKey: [' hey' ],
108
+ // mutationKey: ['hey'],
109
+ networkMode: ' always' ,
110
+ onMutate(vars ) {
111
+
112
+ },
74
113
mutationFn : async (id : number ) => {
75
- await delay (500 )
114
+ await delay (5000 )
76
115
return ' hey'
77
116
},
78
117
})
79
118
</script >
80
119
81
120
<template >
82
121
<main >
83
- <h1 >defineQueryLoader() </h1 >
122
+ <h1 >TanStack Query </h1 >
84
123
<pre >User: {{ route.params.id }}</pre >
85
124
86
125
<label >
@@ -104,16 +143,13 @@ const {
104
143
<input type =" checkbox" v-model =" simulateError" /> Throw on Fetch
105
144
</label >
106
145
<br />
107
- <button @click =" refetch()" >Refresh</button >
146
+ <button @click =" refetch({ cancelRefetch: false })" >Refresh</button >
147
+ <button @click =" testRefetch()" >Refresh 2</button >
108
148
</fieldset >
109
149
110
- <RouterLink :to =" { params: { id: Number(route.params.id) - 1 } }"
111
- >Previous</RouterLink
112
- >
150
+ <RouterLink :to =" { params: { id: Number(route.params.id) - 1 } }" >Previous</RouterLink >
113
151
|
114
- <RouterLink :to =" { params: { id: Number(route.params.id) + 1 } }"
115
- >Next</RouterLink
116
- >
152
+ <RouterLink :to =" { params: { id: Number(route.params.id) + 1 } }" >Next</RouterLink >
117
153
118
154
<h2 >TQ</h2 >
119
155
0 commit comments