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

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

在构建现代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的useFetch:高效数据获取与处理指南的更多相关文章

  1. 今天聊一聊nuxt.js(上)

    背景 近期在做内部系统的重构,从一线业务彻底的重构,经过充分的考虑我们准备把这个项目打造成前台业务的试验站,比如ssr和一些其他的前沿技术的探索,积累充分的经验后待合适的契机应用到C端的项目中. 既然 ...

  2. Nuxt.js开启SSR渲染快速入门

    第一节:nuxt.js相关概述 nuxt.js简单的说是Vue.js的通用框架,最常用的就是用来作SSR(服务器端渲染).Vue.js是开发SPA(单页应用)的,Nuxt.js这个框架,用Vue开发多 ...

  3. 解析Nuxt.js Vue服务端渲染摸索

    本篇文章主要介绍了详解Nuxt.js Vue服务端渲染摸索,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Nuxt.js 十分简单易用.一个简单 ...

  4. Nuxt.js logoVue.js 后端渲染开源库 Nuxt.js

    Nuxt.js 是一个通过 Vue 用于服务端渲染的简单框架,灵感来自 Next.js. 目前尚处于开发阶段,1.0 版本即将发布 1 分钟视频演示 Nuxt 基于 ES2015,这使得代码有着更愉快 ...

  5. Vue 爬坑之路(十一)—— 基于 Nuxt.js 实现服务端渲染(SSR)

    直接使用 Vue 构建前端单页面应用,页面源码时只有简单的几行 html,这并不利于网站的 SEO,这时候就需要服务端渲染 2016 年 10 月 25 日,zeit.co 背后的团队对外发布了一个 ...

  6. 从壹开始 [ Nuxt.js ] 之二 || 项目搭建 与 接口API

    前言 哈喽大家周一好,今天的内容比较多,主要就是包括:把前端页面的展示页给搭出来,然后调通接口API,可以添加数据,这两天我也一直在开发,本来想一篇一篇的写,发现可能会比较简单,就索性把项目搭建的过程 ...

  7. 从壹开始 [ Nuxt.js ] 之一 || 为开源收录Bug之 TiBug项目 开篇讲

    缘起 哈喽大家周二好呀,刚刚经历过了几天火车抢票,整个人都不好了,不知道小伙伴对今年的春节是否还一如既往的期待呢,眼看都要春节了,本来也想写篇2018总结篇,但是怕不免会出现鸡汤文的窠臼嫌疑,想想还是 ...

  8. 从壹开始前后端分离 [ vue + .netcore 补充教程 ] 二八║ Nuxt 基础:面向源码研究Nuxt.js

    前言 哈喽大家周五好,又是一个开开心心的周五了,接下来就是三天小团圆啦,这里先祝大家节日快乐咯,希望都没有加班哈哈,今天公司发了月饼,嗯~时间来不及了,上周应该搞个活动抽中几个粉丝发月饼的,下次吧,这 ...

  9. Nuxt.js笔记

    前置知识 SSR服务器渲染 Vue SSR(server side rendering)服务端渲染 和 Vue SPA(single page application)单页应用 Vue SSR-> ...

  10. Nuxt.js国际化vue-i18n的搭配使用

    Nuxt.js国际化的前提是,已经使用脚手架工具搭建好了Nuxt.js的开发环境. 我使用的环境是nuxt@2.3 + vuetify@1.4 + vue-i18n@7.3 1. 先安装vue-i18 ...

随机推荐

  1. java学习之旅(day.14)

    可变字符串 StringBuffer:可变长字符串,运行效率慢,线程安全 StringBuilder:可变长字符串,运行效率快,线程不安全 package com.zhang.lei; //Strin ...

  2. Flask源码阅读

    上下文篇 整个Flask生命周期中都依赖LocalStack()栈?.而LocalStack()分为请求上下文_request_ctx_stack和应用上下文_app_ctx_stack. _requ ...

  3. Ceph配置与认证授权

    目录 Ceph配置与认证授权 1. 为什么现在不采用修改配置文件的方式了呢? 2. Ceph元变量 3. 使用命令行修改配置 3.1 全部修改(使用服务名) 3.2 部分修改(修改进程) 3.3 临时 ...

  4. 利用Django实现文件上传

    一.form表单的形式上传文件 1.路由 urlpatterns = [ path("upload/", views.UploadView.as_view(),) ] 2.视图 f ...

  5. 原型工具--canva可画

    Canva 是一个功能强大的在线设计平台,提供了丰富的设计工具和素材,包括原型设计.尽管 Canva 在原型设计方面并不像专门的原型设计工具(如Sketch.Figma.Adobe XD等)那样功能全 ...

  6. nginx map模块使用和配置

    主机 IP 备注 master1 10.0.0.63 master2 10.0.0.64 1. NGINX MAP模块与NGINX GEO模块 在通常情况下,使用nginx基于 ip 限制访问请求频率 ...

  7. ReplayKit2 有线投屏项目总结

    一.实现目标 iOS11.0以上设备通过USB线连接电脑,在电脑端实时看到手机屏幕内容 画质达到超清720级别,码率可达到1Mbps以上 二.实现技术方案设计 1.手机端采用ReplayKit2框架, ...

  8. iOS符号表手工还原

    1.通过Xcode的Device工具导出app.crash文件 2.将.crash 和 .dSYM符号 app放在同一个目录中 3.寻找symbolicatecrash,将symbolicatecra ...

  9. MYSQL 移机重装步骤(windows11)

      MYSQL 移机重装步骤(windows11)   目的:已有电脑 A,D盘安装有mysql(安装方式为免安装) , 准备在另一台电脑B上,复制安装电脑A上的mysql(8.0.23版本) . 要 ...

  10. mescroll.js 使用

    mescroll.js 使用 附:点击查看中文文档 第一步:引入css和js // unpkg的CDN: <link rel="stylesheet" href=" ...