0
点赞
收藏
分享

微信扫一扫

【Nuxt3从入门到实战】第五啪:数据获取,就是这么轻松惬意!

视频教程

为了让喜欢看视频的小伙伴学习,我专门给该系列录制了视频,下面是视频列表:

Nuxt3从入门到实战:https://space.bilibili.com/480140591/channel/seriesdetail?sid=456250

小伙们快乐学习的同时一定要动动小手,三连一波鼓励一下村长啊!

前言

大家好,我是村长,欢迎关注我的公众号村长学前端和B站Young村长

上一篇写了​​组件自动导入​​​,通过​​nuxt​​的组件系统,我们使用组件时不需要导入和注册组件,用就完了,开发体验杠杠的!但我突然想到,我们平时开发还需要用到第三方组件库,那么组件库能自动导入吗?

相关的文档参见:http://v3.nuxtjs.org/docs/directory-structure/components#library-authors

所以如果严格按照​​nuxt​​​要求定义我们组件库并添加​​nuxt.js​​​文件,自动引入自然没有问题。然而在我尝试的两个组件库:​​vue-devui​​​和​​naive-ui​​中,都不是很贴合它的要求,所以均以失败告终!希望有识之士可以折腾一下,如果你有解决方案,还请不吝赐教!

那么如何引入它们哪?其实通过插件体系获取​​app​​实例就能手动注册,所以这并不是大问题。

本篇我们写一写组件逻辑,首先想到的是获取数据。

​nuxt3​​中提供的数据获取函数有以下四个:

  • useFetch
  • useLazyFetch
  • useAsyncData
  • useLazyAsyncData

注意:它们都必须在​​setup​​​或​​生命周期钩子​​中使用

useAsyncData

在页面、组件或插件中都可以使用​​useAsyncData​​获取那些异步数据。比如:

const {
data: Ref<DataT>, // 返回的数据
pending: Ref<boolean>, // 加载状态指示器
refresh: (force?: boolean) => Promise<void>, // 强制刷新函数
error?: any // 请求失败的错误信息
} = useAsyncData(
key: string,// 唯一键用于多次请求结果去重
fn: () Object,// 返回数值的异步函数
// lazy - 是否在路由之后才请求数据,server - 是否在服务端请求数据
options?: { lazy: boolean, server: boolean }
)

获取待办事项数据,index.vue:

<template>
<div>
<!-- 待办列表 -->
<div v-for="todo in todos" :key="todo.id">
<input type="checkbox" v-model="todo.completed">
<strong>{{todo.title}}</strong>
</div>
</div>
</template>
<script setup lang="ts">
const { data: todos } = await useAsyncData(
'count', () => $fetch('/api/todos'))
</script>

$fetch使用参考ohmyfetch

useLazyAsyncData

该方法等效于​​useAsyncData​​​,仅仅设置了​​lazy​​选项为true,也就是它不会阻塞路由导航,这意味着我们需要处理data为null的情况(或者通过default选购给data设置一个默认值)

useFetch

页面、组件或者插件中可以使用​​useFetch​​获取任意URL资源。

​useFetch​​​是对​​useAsyncData​​包装,自动生成key同时推断响应类型,用起来更简单。

看下面方法签名,基本完全相同:

const {
data: Ref<DataT>,
pending: Ref<boolean>,
refresh: (force?: boolean) => Promise<void>,
error?: any
} = useFetch(url: string, options?)

useLazyFetch

该方法等效于​​useFetch​​​,仅设置了​​lazy​​选项为true,所以它不会阻塞路由导航,这意味着我们需要处理data为null的情况(或者通过default选购给data设置一个默认值)

最佳实践

只选取需要的数据

由于请求回来的数据会存储在页面payload中,甚至包括那些没有用到的字段,所以文档中明确建议大家只选择那些组件用到的数据,我们可以设置$fetch的​​pick​​选项。

比如,下面的用法:

const { data: mountain } = await useFetch('/api/mountains/everest', { 
pick: ['title', 'description']
})

配套视频

本系列文章有配套视频,喜欢看视频学习的小伙伴可以前往观看。

​​https://space.bilibili.com/480140591/channel/seriesdetail?sid=456250​​

下次预告

解决数据获取的任务之后,下一步是业务逻辑的组织问题以及状态管理了,Nuxt3有一个叫做composables的约定目录,能够。



举报

相关推荐

0 条评论