I need to query an API as a side-effect of an action and I am trying to use @tanstack/vue-query. Whenever I try to call useQuery inside a function, it throws an error, vue-query hooks can only be used inside setup() function or functions that support injection context.
For example:
api.js
export const getAPIRequest = (url, params={}) => useQuery({ queryKey: [url, params], queryFn: fetch(url, { method: 'GET', headers: {'Content-Type': 'application/json' }, })})
component.vue
<script setup>const getDetails = () => { const { data: data } = getAPIRequest('/some-url') return data}</script><template><button @click="getDetails">Click Here</button></template>
I tried to find a better way to query API from inside a function but I concluded that vue-query can only be called from setup function only. One hack that I came across was answered in this github discussion thread.
Is it true that we can use vue-query only inside setup function? If true, I am not sure how should I structure my project. I have to design side effects that come from button click or typing. Should I move those side effects to POST requests to avoid this situation or is there a better way?
I want to continue using @tanstack/vue-query as it has caching, updating data in background, reactive responses and many more. Is there a better option?