defineBasicLoader()
Basic data loader that always reruns on navigation.
WARNING
Data Loaders are experimental. Feedback is very welcome to shape the future of data loaders in Vue Router.
Setup
Example
vue
<script lang="ts">
import { defineBasicLoader } from 'unplugin-vue-router/data-loaders/basic'
import { getUserById } from '../api'
export const useUserData = defineBasicLoader(
(to, { signal }) => {
return getUserById(to.params.id, { signal })
},
{
// used for SSR only
key: 'user-data',
}
)
</script>
<script lang="ts" setup>
const route = useRoute('/users/[id]')
const {
user,
error
isLoading,
reload,
} = useUserData()
</script>
<template>
<main>
<h1>Basic Data Loader Example</h1>
<pre>User: {{ route.params.id }}</pre>
<fieldset>
<legend>Controls</legend>
<button @click="reload()">Refetch</button>
</fieldset>
<RouterLink :to="{ params: { id: Number(route.params.id) || 0 - 1 } }"
>Previous</RouterLink
>
|
<RouterLink :to="{ params: { id: Number(route.params.id) || 0 + 1 } }"
>Next</RouterLink
>
<h2>State</h2>
<p>
<code>isLoading: {{ isLoading }}</code>
</p>
<pre v-if="error">Error: {{ error }}</pre>
<pre v-else>{{ user == null ? String(user) : user }}</pre>
</main>
</template>
SSR
Nuxt
Unresolved Questions
- Should this basic version also track what is used in the route object, like Svelte Data Loaders do?