成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue3 學習筆記— Axios 的使用有變化嗎?

開發 前端
本篇文章主要目的就是想告訴我身邊,正在學 vue3 或者 準備學 vue3 的同學,vue3中網絡請求axios該如何使用.

[[435413]]

本篇文章主要目的就是想告訴我身邊,正在學 vue3 或者 準備學 vue3 的同學,vue3中網絡請求axios該如何使用,防止接觸了一點點 vue3 的同學會有個疑問?生命周期、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> 

上邊的四種安裝方式,根據你創建的項目,自行選擇方式。

一、axio 得基本使用

先創建一個組件,引入 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 是生命周期鉤子函數,頁面加載完成,就會調用這個網絡請求。axios的方法沒有設置網絡請求方式。默認是 GET 請求。

打開服務,查看網絡請求的時候發現,請求失敗了:

報錯內容: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 學習筆記 (二)——axios 的使用有變化嗎?

在網絡請求處,添加全局配置,并把請求處的url中域名刪除掉。

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

修改完成后,刷新頁面網絡請求就變成成功了。

三、封裝

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

很明白地告訴你,還是太年輕....多吃幾次虧就記住了。封裝最大優點就是,如果三方框架內有 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.  //設置 url params type 的默認值 
  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. //使用時調用 
  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.  //響應攔截 
  18.  instace.interceptors.response.use(res=>{ 
  19.   return res.data 
  20.  },err=>{ 
  21.   //錯誤處理 
  22.  }) 
  23.  return instace(config) 
  24. //使用時調用 
  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的封裝方式有很多,感興趣的同學,可以自己去 axios 文檔了解下,試著自己封裝一個,或者收藏一下,日后直接復制使用就好了,不用再辛苦封裝了。

四、全局引用 axios

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

在main.js內添加全局屬性

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

上述三者的順序不可以調整哦!

在組件內使用時:

  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使用有變化的也就這點東西了。

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2023-12-14 08:25:14

WatchVue.js監聽數據

2021-12-29 07:51:21

Vue3 插件Vue應用

2021-12-01 08:11:44

Vue3 插件Vue應用

2021-11-30 08:19:43

Vue3 插件Vue應用

2023-11-28 09:03:59

Vue.jsJavaScript

2021-11-16 08:50:29

Vue3 插件Vue應用

2021-12-02 05:50:35

Vue3 插件Vue應用

2021-12-08 09:09:33

Vue 3 Computed Vue2

2022-06-29 16:59:21

Vue3Vue2面試

2023-12-11 07:34:37

Computed計算屬性Vue3

2023-06-02 07:32:34

localStorage?監聽

2021-12-15 08:23:42

Vue3 插件Vue應用

2025-05-08 08:44:29

2023-11-29 08:49:31

Vue.jsData 函數

2021-11-26 05:59:31

Vue3 插件Vue應用

2023-12-06 07:43:56

Vue如何定義事件

2024-11-06 10:16:22

2021-01-15 05:16:37

Vue3開源代碼量

2022-11-01 11:55:27

ReactVue3

2022-02-18 09:39:51

Vue3.0Vue2.0Script Set
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美a级成人淫片免费看 | 亚洲乱码国产乱码精品精98午夜 | 亚洲一区中文字幕在线观看 | av免费网址 | 欧美电影大全 | 日韩欧美一区二区三区 | 一区二区三区精品视频 | 天天操天天摸天天干 | 欧美亚洲国产一区二区三区 | 一区二区三区四区在线视频 | 国产成人av免费看 | 久久精品国产一区二区电影 | 91视频在线网站 | 亚洲视频国产视频 | 亚洲超碰在线观看 | 久久精品视频91 | 91精品国产91久久久久久丝袜 | 成人免费影院 | 在线精品一区 | 人人做人人澡人人爽欧美 | 激情欧美日韩一区二区 | 亚洲成人在线免费 | 久久国产精品99久久久久久丝袜 | 国产一区二区黑人欧美xxxx | 成人水多啪啪片 | 91天堂网| 最新免费视频 | 懂色一区二区三区免费观看 | 国产精品一区久久久 | 国产超碰人人爽人人做人人爱 | 蜜臀网 | 中文字幕一区二区三区四区五区 | 亚洲成人福利视频 | 成人av一区| 日韩中出| 伊人二区 | 中文字幕高清av | 一级毛片视频 | 亚洲网站在线观看 | 国产精品视频久久久 | 亚洲va欧美va天堂v国产综合 |