自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Vue3 學(xué)習(xí)筆記— Axios 的使用有變化嗎?

開發(fā) 前端
本篇文章主要目的就是想告訴我身邊,正在學(xué) vue3 或者 準(zhǔn)備學(xué) vue3 的同學(xué),vue3中網(wǎng)絡(luò)請求axios該如何使用.

[[435413]]

本篇文章主要目的就是想告訴我身邊,正在學(xué) vue3 或者 準(zhǔn)備學(xué) vue3 的同學(xué),vue3中網(wǎng)絡(luò)請求axios該如何使用,防止接觸了一點點 vue3 的同學(xué)會有個疑問?生命周期、router 、vux使用都改變了,那 axios 使用有沒有啥改變?

小姐姐

使用 axios 之前,需要先安裝好。

  1. yarn add axios 
  2.  
  3. npm install axios 
  4.  
  5. bower install axios 
  6.  
  7. <script src="https://unpkg.com/axios/dist/axios.min.js"></script> 

上邊的四種安裝方式,根據(jù)你創(chuàng)建的項目,自行選擇方式。

一、axio 得基本使用

先創(chuàng)建一個組件,引入 axios 測試一下引入成功沒有!寫入以下代碼:

  1. import axios from "axios" 
  2. import { onMounted } from "vue" 
  3. export default { 
  4.  setup(){ 
  5.   onMounted(()=>{ 
  6.    axios({ 
  7.     url:'https://xxxxxx.net/hj/mp/banner/l' 
  8.    }) 
  9.   }) 
  10.  } 

onMounted 是生命周期鉤子函數(shù),頁面加載完成,就會調(diào)用這個網(wǎng)絡(luò)請求。axios的方法沒有設(shè)置網(wǎng)絡(luò)請求方式。默認(rèn)是 GET 請求。

打開服務(wù),查看網(wǎng)絡(luò)請求的時候發(fā)現(xiàn),請求失敗了:

報錯內(nèi)容:Access to XMLHttpRequest at '

https://xxxxx/hj/mp/banner/l' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

提示存在跨域問題。

二、如何解決跨域問題?

使用 proxy 代理解決這個問題,新建 vue.config.js 文件,添加配置:

  1. module.exports={ 
  2.  devServer:{ 
  3.   proxy:{ 
  4.    '/api':{ 
  5.     target:'https://xxxxx.net'
  6.     changeOrigin:true
  7.     pathRewrite:{ 
  8.      '^/api':'' 
  9.     } 
  10.    } 
  11.   } 
  12.  } 

刷新頁面查看效果的時候就尷尬了,請求地址完全正確,但是一直提示 404 找不到地址。

vue2中的項目,請求正常,但是在vue3中就是404。

vue3 學(xué)習(xí)筆記 (二)——axios 的使用有變化嗎?

在網(wǎng)絡(luò)請求處,添加全局配置,并把請求處的url中域名刪除掉。

  1. axios.defaults.baseURL ='/api' 
  2. axios.defaults.headers.post['Content-Type'] = 'application/json' 
  3.  axios({ 
  4.   url:'/hj/mp/banner/l' 
  5. }) 

修改完成后,刷新頁面網(wǎng)絡(luò)請求就變成成功了。

三、封裝

沒用一次三方庫,講最多的就是如何封裝,封裝后如何使用,直接用不香嗎?

很明白地告訴你,還是太年輕....多吃幾次虧就記住了。封裝最大優(yōu)點就是,如果三方框架內(nèi)有 bug 或者需要更改三方的時候,你只需要修改一個地方就修改完了,維護方便,工作量小,還不容易遺漏。

由于axios請求方法很多,所以封裝的時候可以有多種類型。

方式1:

  1. import axios from 'axios' 
  2.  
  3. //全局配置 
  4. axios.defaults.baseURL = "/api" 
  5. axios.defaults.timeout = 5000 
  6.  
  7. //攔截器 
  8. axios.interceptors.request.use( config=>{ 
  9.  return config 
  10. },error=>{ 
  11.  return Promise.error(error) 
  12. }) 
  13. axios.interceptors.response.use( response=>{ 
  14.  return response.data 
  15. },error=>{ 
  16.  return Promise.error(error) 
  17. }) 
  18.  
  19. export function request(url='',params={},type='POST'){ 
  20.  //設(shè)置 url params type 的默認(rèn)值 
  21.  return new Promise((resolve,reject)=>{ 
  22.   let promise 
  23.   if( type.toUpperCase()==='GET' ){ 
  24.    promise = axios({ 
  25.     url, 
  26.     params 
  27.    }) 
  28.   }else if( type.toUpperCase()=== 'POST' ){ 
  29.    promise = axios({ 
  30.     method:'POST'
  31.     url, 
  32.     data:params 
  33.   }) 
  34.   } 
  35.     //處理返回 
  36.   promise.then(res=>{ 
  37.    resolve(res) 
  38.   }).catch(err=>{ 
  39.    reject(err) 
  40.   }) 
  41.  }) 
  42.  
  43. //使用時調(diào)用 
  44. import {request} from '../network/request.js' 
  45. export default { 
  46.  mounted(){ 
  47.   request('/hj/mp/banner/l').then(res=>{ 
  48.    console.log(res); 
  49.   }).catch(err=>{ 
  50.    console.log(err); 
  51.   }) 
  52.  } 

 由于 axios 返回本身就是一個promise對象,所以我們可以不給外層實例化 promise 對象,封裝變得更簡單。

方式2:

  1. import axios from 'axios' 
  2.  
  3. //全局配置 
  4. axios.defaults.baseURL = "/api" 
  5. axios.defaults.timeout = 5000 
  6.  
  7. export function request(config){ 
  8.  const instace = axios.create({ 
  9.   timeout:50000, 
  10.   method:'post' 
  11.  }) 
  12.  
  13.   //請求攔截 
  14.  instace.interceptors.request.use(config=>{ 
  15.   return config 
  16.  },err=>{}) 
  17.  //響應(yīng)攔截 
  18.  instace.interceptors.response.use(res=>{ 
  19.   return res.data 
  20.  },err=>{ 
  21.   //錯誤處理 
  22.  }) 
  23.  return instace(config) 
  24. //使用時調(diào)用 
  25. import {request} from './request' 
  26. request({ 
  27.  url:'/hj/mp/banner/l'
  28. }).then(res=>{ 
  29.  console.log(res); 
  30. }).catch(err=>{ 
  31.  console.log(err); 
  32. }) 

axios的封裝方式有很多,感興趣的同學(xué),可以自己去 axios 文檔了解下,試著自己封裝一個,或者收藏一下,日后直接復(fù)制使用就好了,不用再辛苦封裝了。

四、全局引用 axios

可以把上述封裝的 request 方法,通過全局引用,這樣在項目的任意文件內(nèi)就都可以使用了。

在main.js內(nèi)添加全局屬性

  1. const app = createApp(App) 
  2. app.config.globalProperties.$http = request 
  3. app.mount('#app'

上述三者的順序不可以調(diào)整哦!

在組件內(nèi)使用時:

  1. import { defineComponent, getCurrentInstance ,onMounted } from "vue" 
  2. export default defineComponent ({ 
  3.  setup(props,ctx){ 
  4.   const { proxy } = getCurrentInstance() 
  5.   onMounted(()=>{ 
  6.    console.log(proxy); 
  7.    proxy.$http('/hj/mp/banner/l').then(res=>{ 
  8.     console.log(res); 
  9.    }) 
  10.   }) 
  11.  } 
  12. }) 

 能看到最后的恭喜你了,vue3中axios使用有變化的也就這點東西了。

 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2023-12-14 08:25:14

WatchVue.js監(jiān)聽數(shù)據(jù)

2021-12-29 07:51:21

Vue3 插件Vue應(yīng)用

2021-12-01 08:11:44

Vue3 插件Vue應(yīng)用

2021-11-30 08:19:43

Vue3 插件Vue應(yīng)用

2023-11-28 09:03:59

Vue.jsJavaScript

2021-11-16 08:50:29

Vue3 插件Vue應(yīng)用

2021-12-02 05:50:35

Vue3 插件Vue應(yīng)用

2021-12-08 09:09:33

Vue 3 Computed Vue2

2023-06-02 07:32:34

localStorage?監(jiān)聽

2022-06-29 16:59:21

Vue3Vue2面試

2023-12-11 07:34:37

Computed計算屬性Vue3

2021-12-15 08:23:42

Vue3 插件Vue應(yīng)用

2025-05-08 08:44:29

2023-11-29 08:49:31

Vue.jsData 函數(shù)

2021-11-26 05:59:31

Vue3 插件Vue應(yīng)用

2023-12-06 07:43:56

Vue如何定義事件

2024-11-06 10:16:22

2022-02-18 09:39:51

Vue3.0Vue2.0Script Set

2021-01-15 05:16:37

Vue3開源代碼量

2022-11-01 11:55:27

ReactVue3
點贊
收藏

51CTO技術(shù)棧公眾號