首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

使用 useNuxtData 进行高效的数据获取与管理

编程知识
2024年07月22日 14:00

title: 使用 useNuxtData 进行高效的数据获取与管理
date: 2024/7/22
updated: 2024/7/22
author: cmdragon

excerpt:
深入讲解了Nuxt 3中useNuxtData组合函数的应用,演示了如何通过此函数访问缓存数据,实现组件间数据共享,以及如何在数据更新时利用缓存提高用户体验。文章提供了具体的用法示例,包括数据获取、访问缓存数据和数据更新的场景。

categories:

  • 前端开发

tags:

  • Nuxt3
  • 缓存
  • 数据
  • 共享
  • 组件
  • 更新
  • 性能

image
image

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

useNuxtData 概述

useNuxtData是 Nuxt 3 中的一个组合函数,用于访问通过其他数据获取函数(如useAsyncDatauseLazyAsyncDatauseFetch
useLazyFetch等)缓存的数据。它允许在不同的组件之间共享数据,避免重复请求,提高性能。

主要功能

  1. 访问缓存数据:通过提供一个唯一的键名来访问之前缓存的数据。
  2. 数据共享:不同的组件可以共享同一数据源,确保数据一致性。
  3. 更新:在数据更新时可以使用缓存数据作为占位符,提高用户体验。

用法示例

1. 获取数据并缓存

pages/posts.vue中,我们可以使用useFetch来获取帖子数据,并将其缓存到posts键名下:

// pages/posts.vue
<script setup>

// 使用 useFetch 获取数据并缓存
const { data, error } = await useFetch('/api/posts', { key: 'posts' })

// 处理错误
if (error.value) {
  console.error('获取帖子失败:', error.value)
}
</script>

<template>
  <div>
    <h1>帖子列表</h1>
    <ul>
      <li v-for="post in data" :key="post.id">{{ post.title }}</li>
    </ul>
  </div>
</template>

2. 访问缓存数据

pages/posts/[id].vue中,我们可以使用useNuxtData来访问posts.vue中缓存的帖子数据:

// pages/posts/[id].vue
<script setup>
import { useRoute } from 'vue-router'

// 获取路由参数
const { id } = useRoute().params

// 访问缓存的帖子数据
const { data: posts } = useNuxtData('posts')

// 使用 useLazyFetch 获取单个帖子的详细信息
const { data, error } = useLazyFetch(`/api/posts/${id}`, {
  key: `post-${id}`,
  default() {
    // 从缓存中找到对应的帖子,并将其设置为默认值
    return posts.value.find(post => post.id === id) || null
  }
})

// 处理错误
if (error.value) {
  console.error('获取帖子详情失败:', error.value)
}
</script>

<template>
  <div>
    <h1>帖子详情</h1>
    <div v-if="data">
      <h2>{{ data.title }}</h2>
      <p>{{ data.content }}</p>
    </div>
  </div>
</template>

3. 更新

pages/todos.vue中,我们可以使用useAsyncData来获取待办事项,并在添加新待办事项时利用缓存进行乐观更新:

// pages/todos.vue
<script setup>

// 获取待办事项数据并缓存
const { data: todos, error } = await useAsyncData('todos', () => $fetch('/api/todos'))

// 处理错误
if (error.value) {
  console.error('获取待办事项失败:', error.value)
}
</script>

<template>
  <div>
    <h1>待办事项</h1>
    <ul>
      <li v-for="todo in todos" :key="todo.id">{{ todo.task }}</li>
    </ul>
    <NewTodo />
  </div>
</template>

components/NewTodo.vue中,我们可以实现添加新待办事项的逻辑:

// components/NewTodo.vue
<script setup>
import { ref } from 'vue'

const newTodo = ref('')
const previousTodos = ref([])

// 访问 todos.vue 中 useAsyncData 的缓存值
const { data: todos } = useNuxtData('todos')

const addTodo = async () => {
  const { data, error } = await useFetch('/api/addTodo', {
    method: 'post',
    body: {
      todo: newTodo.value
    },
    onRequest() {
      // 在请求开始时保存当前的 todos 数据
      previousTodos.value = [...todos.value]
      // 乐观更新 UI
      todos.value.push({ id: Date.now(), task: newTodo.value }) // 假设 ID 为当前时间戳
    },
    onRequestError() {
      // 请求失败时回滚数据
      todos.value = previousTodos.value
    },
    async onResponse() {
      // 请求成功后刷新 todos 数据
      await refreshNuxtData('todos')
    }
  })

  // 清空输入框
  newTodo.value = ''
}
</script>

<template>
  <div>
    <input v-model="newTodo" placeholder="添加新待办事项" />
    <button @click="addTodo">添加</button>
  </div>
</template>

类型定义

useNuxtData的类型定义如下:

useNuxtData<DataT = any> (key: string): { data: Ref<DataT | null> }
  • key: 用于访问缓存数据的键名。
  • data: 返回一个响应式引用,包含缓存的数据或null

注意事项

  • 确保在使用useNuxtData时,提供的键名与之前缓存数据时使用的键名一致。
  • 在进行乐观更新时,要小心处理数据的回滚,以避免用户看到不一致的状态。

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

往期文章归档:

From:https://www.cnblogs.com/Amd794/p/18316021
本文地址: http://shuzixingkong.net/article/288
0评论
提交 加载更多评论
其他文章 ScaleDet:AWS 基于标签相似性提出可扩展的多数据集目标检测器 | CVPR 2023
论文提出了一种可扩展的多数据集目标检测器(ScaleDet),可通过增加训练数据集来扩大其跨数据集的泛化能力。与现有的主要依靠手动重新标记或复杂的优化来统一跨数据集标签的多数据集学习器不同,论文引入简单且可扩展的公式来为多数据集训练产生语义统一的标签空间,通过视觉文本对齐进行训练,能够学习跨数据集的
ScaleDet:AWS 基于标签相似性提出可扩展的多数据集目标检测器 | CVPR 2023 ScaleDet:AWS 基于标签相似性提出可扩展的多数据集目标检测器 | CVPR 2023 ScaleDet:AWS 基于标签相似性提出可扩展的多数据集目标检测器 | CVPR 2023
Figma 替代品 Excalidraw 安装和使用教程
如今远程办公盛行,一个好用的在线白板工具对于团队协作至关重要。然而,市面上的大多数白板应用要么功能单一,要么操作复杂,难以满足用户的多样化需求。尤其是在进行头脑风暴、流程设计或产品原型绘制时,我们常常会遇到以下痛点: 绘图工具不够直观,学习成本高; 缺乏协作功能,难以实时沟通; 无法保护隐私,敏感信
Figma 替代品 Excalidraw 安装和使用教程 Figma 替代品 Excalidraw 安装和使用教程 Figma 替代品 Excalidraw 安装和使用教程
SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密
一、介绍 在实际的软件系统开发过程中,由于业务的需求,在代码层面实现数据的脱敏还是远远不够的,往往还需要在数据库层面针对某些关键性的敏感信息,例如:身份证号、银行卡号、手机号、工资等信息进行加密存储,实现真正意义的数据混淆脱敏,以满足信息安全的需要。 那在实际的业务开发过程中,我们如何快速实现呢?
SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密 SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密
技术文档必备工具:注释目录树神器 Annotree,我的第一个正式开源项目
hi,大家好,我是爱听书的程序员阿超 非常开心能在这里介绍我的第一个正式开源项目 Annotree,项目具体情况如下,请继续阅读&#128214;~ Annotree 注释树 一款生成带注释的目录树工具,大大方便技术文档的编写 项目介绍 &#127881; 本项目基于&#160;folder-exp
技术文档必备工具:注释目录树神器 Annotree,我的第一个正式开源项目 技术文档必备工具:注释目录树神器 Annotree,我的第一个正式开源项目 技术文档必备工具:注释目录树神器 Annotree,我的第一个正式开源项目
DASCTF 2023六月挑战赛|二进制专项 PWN (上)
DASCTF 2023六月挑战赛|二进制专项 PWN (上) 1.easynote edit函数对长度没有检查 free函数存在UAF漏洞 思路:1.通过堆溢出,UAF,修改size位达到堆块重叠,使用fastbin attack,把__malloc_hook,写入one_gadget 2.通过un
DASCTF 2023六月挑战赛|二进制专项 PWN (上) DASCTF 2023六月挑战赛|二进制专项 PWN (上) DASCTF 2023六月挑战赛|二进制专项 PWN (上)
Python 实现Excel和TXT文本格式之间的相互转换
Excel是一种具有强大的数据处理和图表制作功能的电子表格文件,而TXT则是一种简单通用、易于编辑的纯文本文件。将Excel转换为TXT可以帮助我们将复杂的数据表格以文本的形式保存,方便其他程序读取和处理。而将TXT转换为Excel则可以将文本文件中的数据导入到Excel中进行进一步的分析和处理。
Python 实现Excel和TXT文本格式之间的相互转换 Python 实现Excel和TXT文本格式之间的相互转换
iOS开发基础135-Core Data
Objective-C (OC) 中使用 Core Data 是iOS应用开发中管理模型层对象的一种有效工具。Core Data 使用 ORM (对象关系映射) 技术来抽象化和管理数据。这不仅可以节省时间,还能减少编程错误。以下是使用 Core Data 的详细介绍,包括示例代码,以及深入底层的一些
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
本文介绍基于R语言中的readxl包与ggplot2包,读取Excel表格文件数据,并绘制具有多个系列的柱状图、条形图的方法~
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图 R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图 R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图