探索Nuxt.js的useFetch:高效数据获取与处理指南

news/2024/11/18 7:48:34/文章来源:https://www.cnblogs.com/Amd794/p/18303113

title: 探索Nuxt.js的useFetch:高效数据获取与处理指南
date: 2024/7/15
updated: 2024/7/15
author: cmdragon

excerpt:
摘要:“探索Nuxt.js的useFetch:高效数据获取与处理指南”详述了Nuxt.js中useFetch函数的使用,包括基本用法、动态参数获取、拦截器使用,及参数详解。文章通过示例展示了如何从API获取数据,处理动态参数,自定义请求和响应,以及useFetch和useAsyncData的参数选项,帮助开发者掌握异步数据加载技巧。

categories:

  • 前端开发

tags:

  • Nuxt.js
  • useFetch
  • API
  • 数据
  • 异步
  • Vue.js
  • SSR

image

扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长

在构建现代Web应用时,数据获取是关键的一环。Nuxt.js,作为Vue.js的服务器渲染框架,提供了一系列强大的工具来简化数据获取流程。其中,useFetch
可组合函数是用于从API端点获取数据的高级封装,旨在与Nuxt的服务器端渲染(SSR)兼容。这个可组合函数提供了一个方便的封装,包装了useAsyncData
$fetch。它根据URL和fetch选项自动生成一个键,根据服务器路由提供请求URL的类型提示,并推断API响应类型。

useFetch的使用场景

useFetch主要用于在Nuxt应用中从API获取数据。它提供了一个方便的API,使得开发者能够以简洁的方式获取、处理和更新数据。这个函数可以用于任何需要从外部API获取数据的场景,如获取文章列表、用户信息、产品数据等。

示例:获取文章列表

假设我们有一个API端点https://api.example.com/articles,我们可以使用useFetch来获取文章列表:

<template><div><div v-if="pending">加载中...</div><div v-else-if="error">{{ error }}</div><div v-else><ul><li v-for="article in articles" :key="article.id">{{ article.title }}</li></ul></div></div>
</template><script>
import { ref, onMounted } from 'vue';
import { useRoute } from 'vue-router';export default {setup() {const route = useRoute();const { data, pending, error, refresh } = useFetch(`https://api.example.com/articles/${route.params.slug}`);onMounted(() => {// 刷新数据以确保获取最新的文章列表refresh();});return { data, pending, error, refresh };},
};
</script>

使用useFetch获取动态参数

假设API端点需要动态参数,如文章ID:

<script>
import { useRoute } from 'vue-router';export default {setup() {const route = useRoute();const param1 = ref('value1');const { data, pending, error, refresh } = useFetch('https://api.example.com/articles', {query: { param1, param2: 'value2' }});return { data, pending, error, refresh };},
};
</script>

使用拦截器

拦截器允许开发者在请求和响应阶段进行自定义操作,如设置请求头、处理请求错误、存储令牌等:

<script>export default {setup() {const { data, pending, error, refresh } = useFetch('/api/auth/login', {onRequest({ request, options }) {options.headers.authorization = 'Bearer ' + localStorage.getItem('token');},onResponse({ request, response, options }) {localStorage.setItem('token', response.data.token);}});return { data, pending, error, refresh };},
};
</script>

在Nuxt.js中,useFetch是一个强大的可组合函数,它允许你从不同的API端点异步获取数据。以下是对useFetch接收的参数的详细解释:

参数

1. URL

  • 类型string
  • 描述:这是你想要从API获取数据的URL。它可以是绝对路径或相对路径。相对路径将相对于当前页面的URL解析。

2. Options

  • 类型object

  • 描述:这是一个对象,包含了从unjs/ofetchAsyncDataOptions扩展而来的各种选项。以下是一些常见的选项:

    • methodstring- 请求方法,如'GET''POST''PUT''DELETE'等。
    • queryobject-
      一个对象,其键和值将被转换为查询字符串并附加到URL上。例如,{ param1: 'value1', param2: 'value2' }
      将生成?param1=value1&param2=value2
    • paramsobject- 与query类似,也是用于添加查询参数的对象。paramsquery的别名。
    • bodyany- 请求体,可以是对象、数组或其他任何可以被转换为字符串的值。如果传递的是对象,它将被自动转换为JSON字符串。
    • headersobject- 一个对象,包含了要发送的HTTP请求头。
    • baseURLstring- 请求的基本URL,所有请求都将相对于这个URL发送。

示例代码

以下是一个使用useFetch的示例,展示了如何使用这些参数:

async function fetchData() {const { data, pending, error, refresh } = await useFetch('https://api.example.com/data', {method: 'GET',query: { userId: 123 },headers: {'Content-Type': 'application/json','Authorization': 'Bearer your-token'},body: {key1: 'value1',key2: 'value2'},baseURL: 'https://api.example.com'});// 处理数据if (!pending && !error) {console.log(data);}
}

在这个例子中,我们向https://api.example.com/data发送了一个 GET 请求,其中包含查询参数userId
,请求头,以及一个请求体。baseURL被设置为'https://api.example.com',这意味着所有的请求都将相对于这个URL发送。

注意事项

  • 如果同时提供了queryparamsuseFetch会将它们视为相同的选项。
  • body中的对象将被自动转换为JSON字符串,除非显式设置Content-Type请求头。
  • baseURL是可选的,如果未提供,则使用URL参数中的值。

useAsyncData 参数详解

useAsyncData是 Nuxt 3 提供的一个用于异步加载数据的可组合函数。以下是对useAsyncData接收的参数的详细解释:

1. key

  • 类型stringsymbol
  • 描述:一个唯一的键,用于确保数据获取可以在请求之间正确去重。如果未提供,useAsyncData将根据使用它的静态代码位置生成一个键。

2. server

  • 类型boolean
  • 描述:是否在服务器上获取数据。默认值为true。如果设置为false,则数据只会在客户端获取。

3. lazy

  • 类型boolean
  • 描述:是否在加载路由后解析异步函数,而不是阻止客户端导航。默认值为false。如果设置为true,则异步数据获取将不会阻塞路由导航。

4. immediate

  • 类型boolean
  • 描述:如果设置为false,将阻止立即发出请求。默认值为true,意味着异步函数会在组件初始化时立即执行。

5. default

  • 类型() => any(工厂函数)
  • 描述:一个工厂函数,用于设置数据的默认值,在异步函数解析之前使用。通常与lazy: trueimmediate: false选项一起使用。

6. transform

  • 类型(data) => any
  • 描述:在解析后可以用于更改处理函数结果的函数。这个函数接收原始数据作为参数,并返回转换后的数据。

7. pick

  • 类型string[]
  • 描述:仅从处理函数结果中选择指定的键。这允许你从响应中提取特定的数据片段。

8. watch

  • 类型boolean | Array
  • 描述:监听一组响应式源,并在它们发生变化时自动刷新获取的结果。默认情况下,会监听fetch选项和URL
    。通过设置watch: false,可以完全忽略响应式源。结合immediate: false,可以实现完全手动的数据获取。

9. deep

  • 类型boolean
  • 描述:以深层 ref 对象的形式返回数据。默认值为true。如果设置为false,则数据将在浅层 ref 对象中返回,这可以在不需要深层响应式数据时提高性能。

示例代码

返回值

1. data

2. pending

3. refresh/execute

4. error

5. status

默认行为

示例代码

余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:编程智域 前端至全栈交流与成长,阅读完整的文章:探索Nuxt.js的useFetch:高效数据获取与处理指南 | cmdragon's Blog

往期文章归档:

  • Nuxt.js 错误侦探:useError 组合函数 | cmdragon's Blog
  • useCookie函数:管理SSR环境下的Cookie | cmdragon's Blog
  • 轻松掌握useAsyncData获取异步数据 | cmdragon's Blog
  • 使用 useAppConfig :轻松管理应用配置 | cmdragon's Blog
  • Nuxt框架中内置组件详解及使用指南(五) | cmdragon's Blog
  • Nuxt框架中内置组件详解及使用指南(四) | cmdragon's Blog
  • Nuxt框架中内置组件详解及使用指南(三) | cmdragon's Blog
  • Nuxt框架中内置组件详解及使用指南(二) | cmdragon's Blog
  • Nuxt框架中内置组件详解及使用指南(一) | cmdragon's Blog
  • Nuxt3 的生命周期和钩子函数(十一) | cmdragon's Blog
  • Nuxt3 的生命周期和钩子函数(十) | cmdragon's Blog
  • Nuxt3 的生命周期和钩子函数(九) | cmdragon's Blog
  • Nuxt3 的生命周期和钩子函数(八) | cmdragon's Blog
  • Nuxt3 的生命周期和钩子函数(七) | cmdragon's Blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/744093.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webrtc-streamer实时播放监控

公司要做web端监控实时播放,经过调研,webrtc-streamer的方式对前后端项目侵入最少,且没有延迟卡钝的现象。 一、准备工作一个摄像头,摄像头对应的rtsp流链接,一台电脑,一个vue项目。 二、Webrtc-streamer安装及启动教程1、下载安装包下载地址:https://github.com/mpromo…

[b01lers2020]Life on Mars 1

sql注入,信息搜集打开之后大脑一片空白,不知道入手点在哪,信息什么都查不到,最后抓包抓到了东西发现抓包的时候出现了两个参数,直接在网页上访问一下发现爆装备了,在这里我卡了挺久的,最后是看其他师傅的wp发现这里是sql注入,就是一个最基础的整形注入,确定了之后我们…

东软徐洪利:应用型数商架起数据要素价值落地桥梁

“数据要素如何变现?” 这是当下东软集团联席总裁徐洪利与业界交流时,最常遇到的问题。 如同工业时代的石油——作为数字时代的生产要素,数据的重要性已经被广泛认可。但是,几乎没有客户会直接购买数据,就如同直接交易石油的生意远远低于购买石油衍生品,如沥青、燃油、塑…

GIS场景编辑如何实现?这款免费可视化工具帮你轻松搞定

在现代智慧城市、智慧交通、智慧农业等各个领域,三维GIS(地理信息系统)需求日益增多。而要实现一个完美的GIS场景编辑,选择一款得心应手的工具至关重要。目前市面上的三维GIS产品有许多,能够对GIS场景进行编辑的产品却不多,那么是否有一款工具能帮助我们进行GIS场景的编辑…

神经网络中神经元的权重更新

前段时间写过一篇介绍神经网络的入门文章:神经网络极简入门。那篇文章介绍了神经网络中的基本概念和原理,并附加了一个示例演示如何实现一个简单的神经网络。 不过,在那篇文章中并没有详细介绍神经网络在训练时,是如何一步步找到每个神经元的最优权重的。本篇介绍神经网络训…

CaiT:Facebook提出高性能深度ViT结构 | ICCV 2021

CaiT通过LayerScale层来保证深度ViT训练的稳定性,加上将特征学习和分类信息提取隔离的class-attention层达到了很不错的性能,值得看看 来源:晓飞的算法工程笔记 公众号论文: Going deeper with Image Transformers论文地址:https://arxiv.org/abs/2103.17239 论文代码:htt…

Nessus Professional 10.7 Auto Installer for RHEL 9/AlmaLinux 9/Rocky Linux 9 (updated Jul 2024)

Nessus Professional 10.7 Auto Installer for RHEL 9/AlmaLinux 9/Rocky Linux 9 (updated Jul 2024)Nessus Professional 10.7 Auto Installer for RHEL 9/AlmaLinux 9/Rocky Linux 9 (updated Jul 2024) 发布 Nessus 试用版自动化安装程序,支持 macOS Sonoma、RHEL 9 和 Ub…

面试官:Dubbo一次RPC请求经历哪些环节?

大家好,我是三友~~ 今天继续探秘系列,扒一扒一次RPC请求在Dubbo中经历的核心流程。本文是基于Dubbo3.x版本进行讲解一个简单的Demo 这里还是老样子,为了保证文章的完整性和连贯性,方便那些没有使用过的小伙伴更加容易接受文章的内容,这里快速讲一讲Dubbo一个简单的Demo 如…

[SUCTF 2018]GetShell 1

自增绕过,文件上传打开是一个白的页面,开始信息收集,可以在前端代码中看到,index.php?act=upload尝试访问之后发现是文件上传发现是直接给了源码的,代码解释: 这段PHP代码用于处理一个通过HTML表单上传的文件,并检查该文件的内容是否包含任何黑名单中的字符。下面是逐行…

运算式树(Expression tree)深入学习

前言 运算式树(Expression tree)是二叉树数据结构。 目的是实现方便的叠加各种查询条件,无限制的拼接成一个查询条件。提高复杂查询逻辑的编码效率。 一、Lambda表达式 Lambda表达式分为运算式Lambda和语句式Lambda 下面用两种lambda实现同样功能的委托。 (1)运算式Lambda…