vue3 学習ノートにおける axios の使用の変更の概要

vue3 学習ノートにおける axios の使用の変更の概要

axios を使用する前に、まずインストールする必要があります。

糸追加アクシオス
 
npm インストール axios
 
bower axios をインストール
 
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

作成したプロジェクトに応じて、上記の 4 つのインストール方法を選択できます。

1. axioの基本的な使い方

まずコンポーネントを作成し、axios をインポートして、インポートが成功するかどうかをテストします。次のコードを記述します。

「axios」からaxiosをインポートします
「vue」から{onMounted}をインポートします
エクスポートデフォルト{
 設定(){
  マウント時(()=>{
   アクシオス({
    url:'https://xxxxxx.net/hj/mp/banner/l'
   })
  })
 }
}

onMounted はライフサイクル フック関数です。ページが読み込まれると、このネットワーク リクエストが呼び出されます。 axios メソッドはネットワーク要求メソッドを設定しません。デフォルトは GET リクエストです。

サービスを開いてネットワーク要求を確認すると、要求が失敗したことがわかりました。

エラー内容: オリジン 'http://localhost:3000' からの 'https://xxxxx/hj/mp/banner/l' の XMLHttpRequest へのアクセスが CORS ポリシーによってブロックされました: 要求されたリソースに 'Access-Control-Allow-Origin' ヘッダーが存在しません。

これはクロスドメインの問題を示しています。

2. クロスドメインの問題を解決するには?

この問題を解決するにはプロキシを使用し、新しい vue.config.js ファイルを作成して構成を追加します。

モジュール.エクスポート={
 開発サーバー:{
  プロキシ:{
   '/api':{
    ターゲット: 'https://xxxxx.net',
    変更元:true、
    パス書き換え:{
     '^/api':''
    }
   }
  }
 }
}

効果を確認するためにページを更新すると、恥ずかしいです。要求されたアドレスは完全に正しいのですが、404 アドレスが見つかりませんというプロンプトが繰り返し表示されます。

vue2 のプロジェクトではリクエストは通常​​どおりですが、vue3 では 404 になります。

ネットワーク要求時に、グローバル構成を追加し、要求の URL 内のドメイン名を削除します。

axios.defaults.baseURL = '/api'
axios.defaults.headers.post['Content-Type'] = 'application/json'
 アクシオス({
  url:'/hj/mp/banner/l'
})

変更が完了すると、ページを更新するためのネットワーク要求が成功します。

3. パッケージ

サードパーティのライブラリは一度も使ったことがありません。一番話題になるのは、どうやってカプセル化するか、カプセル化後はどう使うかです。直接使った方がよいのではないでしょうか。

はっきり言いますが、あなたはまだ若すぎます...もう少し損失を経験した後、あなたはそれを思い出すでしょう。カプセル化の最大の利点は、サードパーティのフレームワークにバグがあったり、サードパーティを変更する必要がある場合、1か所を変更するだけで変更が完了することです。メンテナンスが容易で、作業負荷が少なく、見逃しにくいです。

axios リクエスト メソッドは多数あるため、カプセル化には複数の種類が存在する可能性があります。

方法1:

'axios' から axios をインポートします
 
//グローバル設定 axios.defaults.baseURL = "/api"
axios.defaults.timeout = 5000
 
//インターセプター axios.interceptors.request.use(config=>{
 設定を返す
},エラー=>{
 Promise.error(error) を返します
})
axios.interceptors.response.use(response=>{
 応答データを返す
},エラー=>{
 Promise.error(error) を返します
})
 
エクスポート関数 request(url='',params={},type='POST'){
 //URLパラメータ型のデフォルト値を設定する return new Promise((resolve,reject)=>{
  約束させる
  if(type.toUpperCase()==='GET'){
   プロミス = axios({
    URL、
    パラメータ
   })
  }そうでない場合(type.toUpperCase()=== 'POST'){
   プロミス = axios({
    メソッド:'POST',
    URL、
    データ:パラメータ
  })
  }
    //処理 return promise.then(res=>{
   解決する
  }).catch(エラー=>{
   拒否(エラー)
  })
 })
}
 
// 使用時にimport {request} from '../network/request.js'を呼び出す
エクスポートデフォルト{
 マウントされた(){
  リクエスト('/hj/mp/banner/l')。その後(res=>{
   コンソールログ(res);
  }).catch(エラー=>{
   コンソールログ(エラー);
  })
 }
}

axios は promise オブジェクト自体を返すため、外側のレイヤーの promise オブジェクトをインスタンス化する必要がなくなり、カプセル化が簡単になります。

方法2:

'axios' から axios をインポートします
 
//グローバル設定 axios.defaults.baseURL = "/api"
axios.defaults.timeout = 5000
 
エクスポート関数リクエスト(config){
 定数インスタンス = axios.create({
  タイムアウト:50000、
  メソッド:'post'
 })
 
  //リクエストインターセプション instace.interceptors.request.use(config=>{
  設定を返す
 },エラー=>{})
 //レスポンスインターセプション instace.interceptors.response.use(res=>{
  res.dataを返す
 },エラー=>{
  // エラー処理 })
 インスタンス(config)を返す
}
// 使用時にimport {request} from './request'を呼び出す
リクエスト({
 url:'/hj/mp/banner/l',
}).then(res=>{
 コンソールログ(res);
}).catch(エラー=>{
 コンソールログ(エラー);
})

axios をカプセル化する方法はたくさんあります。興味がある場合は、axios ドキュメントにアクセスして詳細を学習し、自分でカプセル化してみるか、保存して直接コピーし、カプセル化せずに将来使用することもできます。

4. axiosへのグローバル参照

上記のカプセル化されたリクエスト メソッドはグローバルに参照できるため、プロジェクト内の任意のファイルで使用できます。

main.js にグローバル プロパティを追加する

const app = createApp(App)
app.config.globalProperties.$http = リクエスト
app.mount('#app')

上記3つの順番は調整できません!

コンポーネント内で使用する場合:

「vue」から{defineComponent、getCurrentInstance、onMounted}をインポートします。
デフォルトのdefineComponentをエクスポートする({
 セットアップ(props,ctx){
  const { プロキシ } = getCurrentInstance()
  マウント時(()=>{
   console.log(プロキシ);
   proxy.$http('/hj/mp/banner/l').then(res=>{
    コンソールログ(res);
   })
  })
 }
})

最後までお読みいただき、ありがとうございます。これは、vue3 での axios の使用で変更された唯一の点です。

vue3学習ノートにおけるaxiosの使い方の変更点についての記事はこれで終わりです。vue3関連のコンテンツについては、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue3はフロントエンドのログを出力するためにaxiosインターセプターを使用する
  • TypeScript を使用して Vue3 で axios をカプセル化する詳細な例
  • Vue3 (V) HTTPライブラリaxiosの統合の詳細
  • Vue3はaxiosのクロスドメイン実装プロセス分析を構成する

<<:  CSS スティッキーフッタークラシックレイアウトの実装

>>:  Firefox ブラウザでバックグラウンド ミュージックを再生するための究極のソリューション (Chrome マルチブラウザ対応)

推薦する

要素テーブルの多層ネスト表示の実践

複数の注文を含むリストが必要です。各注文は一意にすることも、複数の注文を結合することもできます。各注...

mysql8.0.12 でルートパスワードをリセットする方法

データベースをインストールした後、誤ってインストール ウィンドウを閉じたり、長期間 root ユーザ...

Vue の this.$store.state.xx.xx に関する簡単な説明

目次これを Vue.$store.state.xx.xxストアからデータを取得する私のプロジェクトフ...

Linux で特定のユーザーにフォルダーのすべてのコンテンツを許可するにはどうすればよいですか?

【問題分析】 chown コマンドを使用できます。ここで ch は change (変更) を表し...

Tomcatを使用して共有ライブラリを設定し、同じjarを共有する

デプロイされるプロジェクトが増えるにつれて、Tomcat にデプロイされるリリース パッケージも増え...

インターフェース設計の10の一般的なルール

<br />これは私がずっと前に集めた記事です。皆さんの参考のために共有したいと思います...

CocosCreatorオブジェクトプールの使い方

目次序文:特定の操作ステップ1: プレハブを準備するステップ2: オブジェクトプールを初期化するステ...

「@INC で ExtUtils/MakeMaker.pm が見つかりません」というエラーを解決する

mha4mysql をインストールする場合の手順は、おおよそ次のようになります: unzip、per...

JavaScript ジグソーパズルゲーム

この記事の例では、ジグソーパズルゲームを実装するためのJavaScriptの具体的なコードを参考まで...

この記事では、jsのデータ型とデータ構造の世界を紹介します。

目次1. 動的型付けとは何ですか? 2. データ型2.1 プリミティブ型 (6 つのプリミティブ型、...

エラー 1045 (28000): ユーザー ''root''@''localhost'' のアクセスが拒否されました (パスワード使用: YES) 実用的な解決策

昨日はデータベースへの接続に問題はありませんでしたが、今日はデータベースへの接続時にこのエラーが報告...

a タグにはテキストと画像があります。テキストを非表示にして画像のみを表示するにはどうすればよいでしょうか?

多くの場合、画像を表示する<a>タグのスタイルに遭遇しますが、タグ内にテキストがあり、そ...

ウェブページの読みやすさを向上させるいくつかの方法

1. 対照的な色を使用します。ここでのコントラストとは、テキストの色と背景色のコントラストを指します...

JavaScript シミュレーション計算機

この記事では、JavaScriptシミュレーション計算機の具体的なコードを参考までに紹介します。具体...

MySQL ページング中にオフセットが大きすぎる場合の SQL 最適化の経験の共有

問題を見つけるコンテンツをリストで表示すると、リスト内のコンテンツの数は多いかもしれませんが、ユーザ...