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

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.xdnf.cn/news/8157.html

相关文章:

  • ModbusRTU转profibusDP网关接皖仪SFJ-16M 氦质谱检漏仪与PLC通讯
  • 虚拟小号查询技术解析
  • Redis进阶之高可用
  • 选新手机的参考:CPU型号、内存、外存、屏幕、摄像头以及电池等。
  • 详解受约束的强化学习(三、公式关系串联)
  • 【Linux 服务器磁盘映像备份与恢复实战指南】虚拟机备份,物理机上云都可以用这套方案!
  • 2025年气候持续大风,消纳减少,如何保收益?东润能源整体解决方案持续保收益保增长
  • C++:面试题汇总
  • 系统与账户安全
  • 一个纯粹基于jQuery和Django的SSE站内信通知的例子
  • 飞牛fnNAS远程映射盘符
  • PARSCALE:大语言模型的第三种扩展范式
  • CAD如何导出PDF?PDF如何转CAD?详细教程来了
  • Phantom 根据图片和文字描述,自动生成一段视频,并且动作、场景等内容会按照文字描述来呈现
  • 对Web界面进行简单自动化测试Selenium
  • vscode git push 记录
  • 现代生活健康养生新策略
  • Aqua Mail Pro 安卓邮件管理助手可备份和恢复的邮件客户端 v1.55.1专业版
  • (第94天)OGG 微服务搭建 Oracle 19C CDB 架构同步
  • 网络安全-等级保护(等保) 3-1-1 GB/T 28448-2019 附录A (资料性附录)测评力度附录C(规范性附录)测评单元编号说明
  • spring boot 实现resp视频推流
  • 觉醒三境:在敦煌的风沙中寻找生命的纹路
  • 基于deepseek 以及豆包工具+nodejs 搭建A I自动化客服系统
  • 角度回归——八参数检测四边形Gliding Vertex
  • 树 Part 9
  • 【IC_Design】跨时钟域的寄存器更新后锁存
  • MyBatis-Plus的自带分页方法生成的SQL失败:The error occurred while setting parameters
  • (37)服务器增加ipv6配置方法
  • MySQL 查询用户权限的方法
  • redis-7.4.2 通过 systemd管理,rpmbuild spec文件参考