Vue基础教程(188)axios之Vue.js 3.0的新变化—替代Vue.prototype:别了,Vue.prototype!Vue.js 3.0 携手 Axios 开启“新时代”,是时候跟老伙

第一章:忆往昔峥嵘岁月稠——Vue 2 的 “this.$http” 黄金时代

还记得在 Vue 2 的美好旧时光吗?那时候,我们想用一个库,比如今天的主角——那个号称“基于 Promise 的、贼好用的 HTTP 客户端” Axios,是怎么做的?

简单得令人发指!在 main.js 里,我们通常是这么“骚操作”的:

// Vue 2 经典操作 main.js
import Vue from 'vue'
import App from './App.vue'
import axios from 'axios'

// 骚操作来了!挂在 Vue 的原型上
Vue.prototype.$http = axios

new Vue({
  render: h => h(App),
}).$mount('#app')

就这么一行 Vue.prototype.$http = axios,我们就完成了一次伟大的“全局注册”。从此以后,在整个 Vue 帝国的任何角落,无论是京城(根组件)还是偏远山村(深层子组件),你都可以通过 this.$http 呼风唤雨,发起任何 HTTP 请求。

<!-- 在任何 Vue 2 组件中 -->
<script>
export default {
  methods: {
    async fetchUserData() {
      // 看,多么自然,多么顺手!
      const response = await this.$http.get('/api/user/123');
      this.user = response.data;
    }
  }
}
</script>

这感觉,就像你给你家所有的门都配了同一把万能钥匙,去哪儿都畅通无阻。this 就是那把钥匙,$http 就是门上那个唯一的锁眼。

但是!(凡事就怕个但是)

Vue 3 驾着七彩祥云来了,它对着 this 说:“你,已经不是从前那个少年了。”

第二章:时代的眼泪——Vue 3 为何要对 “Vue.prototype” 下手?

Vue 3 引入了一个革命性的东西——Composition APIsetup 函数。这玩意儿好是好,但它有一个“致命”的特点:setup 函数内部,你访问不到 this

对,你没听错,在 setup 里,this 的值是 undefined

为什么?因为 Vue 3 的设计思想是“逻辑复用”和“更好的 TypeScript 集成”。setup 在组件实例被完全创建之前就执行了,此时的 this 还没指向当前组件实例。如果把逻辑都挂在 this 上,那在 setup 里就彻底歇菜了,这不符合 Vue 3 的“人设”。

所以,那个我们曾经无比依赖的 Vue.prototype,在 Vue 3 的 setup 世界里,直接“失业”了。

那么问题来了:Axios 这位老员工,我们该如何安置?难道要在每个组件里 import axios from 'axios' 吗?那也太不“Vue”了,代码冗余,而且配置起来麻烦死。

别急,Vue 3 官方早就给我们准备好了两套新的“安置方案”,一套是“精准投放”,另一套是“全局广播”。

第三章:新皇登基,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值