The fetch Method
Nuxt >= 2.12
Nuxt.js v2.12 introduces a new hook called fetch in any of your Vue components.
fetch(context) has been deprecated, instead you can use an anonymous middleware in your page: middleware(context)
When to use fetch?
Every time you need to get asynchronous data. fetch is called on server-side when rendering the route, and on client-side when navigating.
It exposes $fetchState at the component level:
$fetchState.pending:Boolean, allows you to display a placeholder whenfetchis being called on client-side.$fetchState.error:nullorError, allows you to display an error message$fetchState.timestamp:Integer, is a timestamp of the last fetch, useful for caching withkeep-alive
If you want to call the fetch hook from your template use:
<button @click="$fetch">Refresh</button>
or component method:
// from component methods in script section
export default {
methods: {
refresh() {
this.$fetch()
}
}
}
You can access the Nuxt context within the fetch hook using this.$nuxt.context.
Options
fetchOnServer:BooleanorFunction(default:true), callfetch()when server-rendering the pagefetchDelay:Integer(default:200), set the minimum executing time in milliseconds (to avoid quick flashes)
When `fetchOnServer` is falsy (`false` or returns `false`), `fetch` will be called only on client-side and `$fetchState.pending` will return `true` when server-rendering the component.
<script>
export default {
data() {
return {
posts: []
}
},
async fetch() {
this.posts = await this.$http.$get(
'https://jsonplaceholder.typicode.com/posts'
)
},
fetchOnServer: false
}
</script>
