您现在的位置是:百科 >>正文

vue如何获取后端数据

百科4884人已围观

简介vue项目里,后端数据不会自己跑进前端。你得主动去拿,而且拿的方式还不止一种。最常见的做法是axios发请求,但很多人装完axios就开写,结果跨域报错、接口返回结构混乱、组件卸载后还在setData ...

vue项目里,何获取后端后端数据不会自己跑进前端。数据你得主动去拿,何获取后端而且拿的数据方式还不止一种。最常见的何获取后端做法是axios发请求,但很多人装完axios就开写,数据结果跨域报错、何获取后端接口返回结构混乱、数据组件卸载后还在setData,何获取后端这些坑我全踩过。数据

先看最基础的何获取后端写法。假设后端接口是数据GET /api/user/profile,你用axios,何获取后端在mounted里调用。数据代码大概长这样:

import axios from 'axios' export default {  data() {  return {  userInfo: null } },何获取后端 async mounted() {  const {  data } = await axios.get('/api/user/profile') this.userInfo = data.data } } 

注意这里我用了data.data,因为后端通常包一层响应结构。你要是不看接口文档直接this.userInfo = data,大概率拿到的是个带status、message的壳子,页面直接空白。这事儿我干过,当时还以为是vue的响应式出了问题,查了半天。

但问题来了——如果你在组件销毁前请求才回来,this.userInfo = ...会报错,因为实例已经没了。轻则控制台红色警告,重则内存泄漏。解决办法是加个标志位:

data() {  return {  userInfo: null, _isDestroyed: false } }, beforeUnmount() {  this._isDestroyed = true }, async mounted() {  const {  data } = await axios.get('/api/user/profile') if (!this._isDestroyed) {  this.userInfo = data.data } } 

这种写法简单粗暴,但每个组件都这么搞很烦。所以后来我改用组合式API里的onBeforeUnmount,逻辑更集中。不过说实话,如果你的项目用了VueUse,直接上useAsyncState或者useFetch,人家帮你处理了取消请求和生命周期问题,比自己写省心太多。

还有一种情况,你需要在多个组件里共享同一份后端数据。比如用户登录信息,侧边栏要显示头像,顶部导航要显示昵称,个人页要显示完整资料。每个组件都发一次请求?太蠢了。这时候应该把数据放到Pinia或Vuex里。拿Pinia举例:

// store/user.js export const useUserStore = defineStore('user', {  state: () => ({  profile: null }), actions: {  async fetchProfile() {  const {  data } = await axios.get('/api/user/profile') this.profile = data.data } } }) 

组件里调用store.fetchProfile(),然后直接渲染store.profile。好处很明显——数据只拉一次,所有组件共享同一份引用。坏处是得小心,如果用户退出登录,你得手动清空store里的数据,不然下一个登录的人会看到上一个用户的资料。别笑,这bug我见过不止一次。

最后说个容易被忽略的点:后端返回的数据结构不是你想要的。比如接口返回{ id: 1, user_name: '张三' },但你的组件里想用name字段。别在模板里写user_name,也别在组件里写一堆映射逻辑。直接在获取数据后做一次转换:

const raw = (await axios.get('/api/user/profile')).data.data this.userInfo = {  id: raw.id, name: raw.user_name, avatar: raw.avatar_url } 

这样模板干净,组件逻辑也清晰。如果你用的是TypeScript,还能顺手定义个接口类型,编译期就能发现字段拼写错误。

说到底,vue获取后端数据就三件事:选对请求库、管好生命周期、处理好数据结构。别迷信某个最佳实践,适合自己项目规模的就是好的。你要是就一个简单页面,用axios在mounted里拉就完了;你要是搞大型中后台,老老实实上Pinia加请求拦截器。技术选型是权衡,不是炫技。

Tags:

相关文章

  • 编程竞赛是要学到什么程度可以参加

    百科

    编程竞赛是要学到什么程度可以参加?我的答案是:当你还在为一道题卡住三小时,却依然想翻开题解看个究竟的那一刻,就可以去了。别等“学完”,永远学不完。 我见过大一新生,连动态规划是什么都没听说过,就跑去打 ...

    【百科】

    阅读更多
  • 渗透产生的条件

    百科

    渗透要发生,得先有个口子。这个口子不是物理上的洞,而是信息流动的缝隙。我见过一次典型的渗透测试:目标是一家做电商的中型公司,外网只开了443和22两个端口。看起来挺干净,对吧?但测试人员发现SSH版本 ...

    【百科】

    阅读更多
  • 腾讯视频刷永久会员的网站

    百科

    打开搜索引擎敲下“腾讯视频永久会员”,跳出来的结果能让人看花眼。几块钱就能解锁全站VIP内容,甚至号称“永久有效”——这种广告语在贴吧、微博评论区、各种资源分享站里反复出现。我花了一下午翻了十几个这类 ...

    【百科】

    阅读更多


友情链接