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


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

freecompress-cmdragon_cn.png

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

在构建现代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.mfbz.cn/a/800782.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端4】表单 编辑模式、只读模式:HTML的`readonly`、el-input的v-if=“isEdit“

【前端】表单 编辑模式、只读模式 写在最前面一、什么是编辑模式与只读模式&#xff1f;应用场景编辑模式只读模式 二、编辑模式的实现例子只读模式的实现动态切换模式使用HTML的readonly属性使用Vue.js的v-if指令 三、前后端交互 <template>代码块两个字段独立是否直接与…

bash: ip: command not found

输入&#xff1a; ip addr 报错&#xff1a; bash: ip: command not found 报错解释&#xff1a; 这个错误表明在Docker容器中尝试执行ip addr命令时&#xff0c;找不到ip命令。这通常意味着iproute2包没有在容器的Linux发行版中安装或者没有正确地设置在容器的环境变量PA…

HackQuest介绍 web3 学习平台

HackQuest 官网地址&#xff1a; https://www.hackquest.io/zh HackQuest是一个专注于Web3技术教育的在线学习平台&#xff0c;旨在帮助全球开发者掌握区块链、加密货币和去中心化应用&#xff08;DApps&#xff09;领域的最新技能。该平台汇聚了超过14000名活跃开发者&#…

PyMongo Sort 操作:提升你的数据查询效率

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

通过Bugly上报的日志查找崩溃闪退原因

第一步&#xff0c;解析堆栈信息 在bugly上收集到的信息是这样的 0x000000010542e46c 0x0000000104db4000 6792300 OS应用发生崩溃时&#xff0c;系统会生成一份崩溃日志&#xff0c;这份日志中包含了崩溃时的堆栈信息&#xff0c;但这些堆栈信息并非直接指向源代码&#x…

1143 多少个Fibonacci数

首先&#xff0c;我们需要生成一个Fibonacci数列&#xff0c;直到其值超过10^100。由于Fibonacci数列的性质&#xff0c;我们知道这个数列的长度不会超过500。 然后&#xff0c;对于每一对输入的a和b&#xff0c;我们在生成的Fibonacci数列中查找在a和b之间的数的个数。这可以…

JVM 内存介绍

本文主要介绍&#xff1a; JVM 内存分哪几个区&#xff0c;每个区的作用是什么 备注: 橙色:堆 和 方法区 &#xff0c;属于jvm公有部分,可以进行调优 灰色:java栈,本地方法栈和计数器 属于jvm的私有部分,不可进行调优 一个对象从创建到被回收的过程是怎样的? Personpnew Perso…

SpringBoot系列:通过AOP+注解优雅实现操作日志记录

文章目录 前言一、简介1.1 操作日志在企业应用中的重要性1.2 使用AOP和注解实现操作日志记录的好处 二、开发环境三、准备工作3.1 创建操作日志记录表3.2 创建系统日志实体类 四、代码实现4.1 创建业务枚举类4.2 创建日志注解4.3 创建操作状态枚举类4.4 创建IP工具类4.5 创建切…

jvm常用密令、jvm性能优化、jvm性能检测、Java jstat密令使用、Java自带工具、Java jmap使用

1.jps是Java虚拟机的进程状态工具&#xff0c;用于列出正在运行的Java进程 jps命令的使用&#xff1a;cmd打开直接jps 1.1不带参数&#xff1a; jps 默认情况下&#xff0c;列出所有正在运行的 Java 进程的进程 ID 和主类名。 1.2 -l&#xff1a;显示完整的主类名或 JAR 文件…

增值税进项税额转出6大知识点柯桥学会计会计实操做账手把手教学

什么情况下需要进项转出&#xff1f; 转多少&#xff1f; 怎么填报&#xff1f; 小编梳理了一些 关于增值税进项税额转出的常见问题 快来学习吧&#xff01; 哪些情况下进项税额不得从销项税额中抵扣&#xff1f; 1.用于简易计税方法计税项目、免征增值税项目、集体福利或…

ARM 虚拟机FVP环境搭建

ARM Fixed Virtual Platforms (FVPs) 是由 ARM 提供的一系列虚拟化硬件模拟器&#xff0c;用于在物理硬件可用之前开发和测试软件。FVP 模型非常适用于软件开发、验证和性能分析&#xff0c;涵盖了从裸机到操作系统和复杂 SoC 系统的各种应用。 这里以Cortex-M55为例&#xff0…

springcloud使用微服务的搭建

微服务的搭建 1.配置对应信息 Springboot 、springcloud、springcloud alibaba对应关系 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 2.pom.xml的配置 2.1 总项目pom.xml引入依赖 <parent><groupId>org.sprin…

Linux【文件权限的理解】

1. linux的发展史 首先在学习linux之间&#xff0c;我们要问自己几个问题&#xff0c;linux从哪里来&#xff0c;为什么会出现&#xff0c;它的出现代表着什么。 linux的前身unix Multics 和 UNIX 的起源&#xff1a; Multics 是一个由通用电器公司、贝尔实验室和麻省理工学院…

InterSystems IRIS使用python pyodbc连接 windows环境,odbc驱动安装,DSN配置,数据源配置

一、创建的数据库和数据 SELECT 1SELECT $ZVERSIONCREATE TABLE MyApp.Person ( ID INT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Age INT, Gender CHAR(1) );CREATE TABLE MyApp.Person2 ( ID INT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Age INT, Gender CHA…

AI写作不懂提示词 大象Prompt 保姆级系列教程三

一、提示词的核心价值究竟是啥&#xff1f; 最近跟不少业内朋友探讨这事儿&#xff0c;我觉得&#xff1a;提示词的核心价值在于对方法论的封装以及由此带来的知识传播速度加快。 通俗讲&#xff0c;假如你熟悉的行业里有个厉害的“老师傅”&#xff0c;他在核心业务上有好多心…

XXL-Job:分布式任务调度平台的深入解析

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

买卖股票-vector

121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 当天对比当天的&#xff0c;如果符合条件就换&#xff1b; class Solution { public:int maxProfit(vector<int>& prices) {int inf 1e9;int minp inf, maxprofit 0;int n prices.size();for(i…

Docker的数据管理和网络通信

目录 一、Docker 的数据管理 1&#xff0e;数据卷 2&#xff0e;数据卷容器 二、端口映射 三、容器互联&#xff08;使用centos镜像&#xff09; 四、*Docker 镜像的创建 1&#xff0e;基于现有镜像创建 2&#xff0e;基于本地模板创建 3&#xff0e;基于Dockerfile 创…

【postgresql】角色(Role)

PostgreSQL 中&#xff0c;角色&#xff08;Role&#xff09;是一个重要的概念&#xff0c;用于管理数据库的访问权限和用户身份。角色可以被视为用户或组&#xff0c;具体取决于它们的配置方。 角色属性 角色可以具有多种属性&#xff1a; LOGIN&#xff1a;允许角色登录数据…

一个引发openssl崩溃问题案例

1 背景 最近用libevent写了一个https代理功能&#xff0c;在调研的时候&#xff0c;遇到了一个项目用到了本地多个openssl库引发的ssl握手崩溃问题。 2 开发环境 项目库版本号依赖项libeventlibevent-2.1.8-stableopenssl 1.1openssl1.0u / 1.1.1w / 3.3.1...... 3 问题现象…