当前位置: 首页 > article >正文

Vue3前后端分离用户信息显示方案

在Vue3前后端分离的项目中,若后端仅返回用户ID,可通过以下步骤显示用户名:

解决方案

  1. 获取用户信息API
    确保后端提供以下任意一种接口:

    • 批量查询接口:传入多个用户ID,返回对应的用户信息列表

    • 单个查询接口:传入单个用户ID,返回该用户的详细信息

  2. 前端缓存策略
    使用Vue的响应式系统或状态管理(如Pinia)缓存用户信息,减少重复请求:

javascript

复制

下载

// 示例:使用Pinia存储用户信息
import { defineStore } from 'pinia';export const useUserStore = defineStore('users', {state: () => ({userMap: new Map(), // 存储ID与用户名的映射}),actions: {async fetchUsers(userIds) {const missingIds = userIds.filter(id => !this.userMap.has(id));if (missingIds.length === 0) return;// 调用批量API,假设接口为 /api/users?ids=1,2,3const res = await fetch(`/api/users?ids=${missingIds.join(',')}`);const users = await res.json();users.forEach(user => {this.userMap.set(user.id, user.name);});},getUserName(id) {return this.userMap.get(id) || '加载中...'; // 返回占位文本},},
});
  1. 组件中动态渲染
    在获取含用户ID的数据后,触发用户信息加载,并在模板中展示:

vue

复制

下载

<script setup>
import { useUserStore } from '@/stores/userStore';const props = defineProps(['dataList']); // 接收含userId的数据列表
const userStore = useUserStore();// 提取所有用户ID并去重
const userIds = computed(() => {return [...new Set(props.dataList.map(item => item.userId))];
});// 触发用户信息获取
watch(userIds, (ids) => {if (ids.length > 0) {userStore.fetchUsers(ids);}
}, { immediate: true });
</script><template><div v-for="item in dataList" :key="item.id">用户名:{{ userStore.getUserName(item.userId) }}</div>
</template>

优化建议

  • 防抖处理:若数据分页加载,可在滚动到底部时合并多次ID请求

  • 本地缓存:对不常变的数据,使用localStorage设置合理过期时间

  • 占位符优化:数据加载前显示骨架屏或加载中提示,提升用户体验

  • 错误处理:API请求失败时提供重试按钮,并在控制台记录错误

后端协作优化

理想情况下,建议后端在返回主数据时直接关联用户名(如/posts?include=user),可彻底避免前端额外请求。若接口不可改,则按上述方案处理。

通过以上步骤,前端能高效地将用户ID转换为可读用户名,同时保持应用性能。

http://www.lryc.cn/news/2385753.html

相关文章:

  • DL00987-基于深度学习YOLOv11的红外鸟类目标检测含完整数据集
  • 黑马程序员C++2024新版笔记 第4章 函数和结构体
  • 数据仓库,扫描量
  • Day126 | 灵神 | 二叉树 | 层数最深的叶子结点的和
  • Python实例题:人机对战初体验Python基于Pygame实现四子棋游戏
  • Vue3性能优化: 大规模列表渲染解决方案
  • 笔记:将一个文件服务器上的文件(一个返回文件数据的url)作为另一个http接口的请求参数
  • 【RocketMQ 生产者和消费者】- 生产者启动源码 - MQClientInstance 定时任务(4)
  • 超全GPT-4o 风格提示词案例,持续更新中,附使用方式
  • Android 自定义SnackBar和下滑取消
  • Netty学习专栏(三):Netty重要组件详解(Future、ByteBuf、Bootstrap)
  • 详解 C# 中基于发布-订阅模式的 Messenger 消息传递机制:Messenger.Default.Send/Register
  • 多场景游戏AI新突破!Divide-Fuse-Conquer如何激发大模型“顿悟时刻“?
  • Java 函数式接口(Functional Interface)
  • 分布式锁总结
  • 使用MybatisPlus实现sql日志打印优化
  • springboot中redis的事务的研究
  • 为什么我输入对了密码,还是不能用 su 切换到 root?
  • client.chat.completions.create方法参数详解
  • 量子计算与云计算的融合:技术前沿与应用前景
  • 《企业级日志该怎么打?Java日志规范、分层设计与埋点实践》
  • python模块管理环境变量
  • 【泛微系统】后端开发Action常用方法
  • 【算法】力扣体系分类
  • sql:如何查询一个数据表字段:Scrp 数据不为空?
  • 深入浅出人工智能:机器学习、深度学习、强化学习原理详解与对比!
  • 索引下探(Index Condition Pushdown,简称ICP)
  • 基于 ColBERT 框架的后交互 (late interaction) 模型速递:Reason-ModernColBERT
  • vector中reserve导致的析构函数问题
  • 微软开源多智能体自定义自动化工作流系统:构建企业级AI驱动的智能引擎