技術系

[React] Axios vs Fetch

技術系

こんにちは。
なかにしです。

久々のReact記事です。

業務で同じチームの方と話しているとき、
「Axios」は初めて使います~という方が見えて
逆に何使ってるんですか?と聞いたのがきっかけです。

現案件の技術選定を担当させていただいた際、
「非同期といえばAxios」という固定概念でとりあえず決めた経緯があったので、
ちゃんと他の技術も調べないとなーという反省も込めて記事にします。

Fetchとは

非同期通信の際に使われる技術です。
ブラウザに標準搭載で、インストールは不要です。

「fetch(“url”)」でリクエストを飛ばすことができます。

取得データはPromise型で返ってくるので、
「.jsonメソッド」でjsonファイルに変換し、色々します。

Axiosとは

非同期通信の際に使われる技術です。
インストールが必要です。

以下コマンドでインストールできます。

npm i axios

取得データはjsonで返ってくるので、そのまま色々できます。

データ取得時の文法の違い

それぞれの文法の違いを見ていきます。

Get

ユーザー情報を取り出すのを想定します。(API : “sample/sample”)
nameやidなど、ユーザー情報の塊をjsonで取ってきて、名前をコンソールに表示します。

・Fetch

fetch("https://sample/sample")
    .then((response) => response.json())
    .then((user) => console.log(user.name));

・Axios

axios.get("https://sample/sample")
     .then((response) => response.data.name);

まあ若干の差ですね。
そこまで大差はないように見えます。

POST & PUT

{name:Tanaka}というjsonをサーバー側に送り、登録や更新をする想定です。
POSTとPUTはほぼ一緒なので、一気にやります。

urlはgetと同じく「sample/sample」にします。
無事に送れたら「ヤッタネ!」を出力します。

・Fetch

  // POST
  const data = { name: "Tanaka" };

  fetch("https://sample/sample", { method: "POST", body: JSON.stringify(data) })
       .then((response) => console.log("ヤッタネ!"));

  // PUT
  const data = { name: "Tanaka" };

  fetch("https://sample/sample", { method: "PUT", body: JSON.stringify(data) })
       .then((response) => console.log("ヤッタネ!"));

・Axios

  // POST
  const data = { name: "Tanaka" };

  axios.post("https://sample/sample", data)
       .then((response) => console.log("ヤッタネ!"));

  // PUT
  const data = { name: "Tanaka" };

  axios.put("https://sample/sample", data)
       .then((response) => console.log("ヤッタネ!"));

個人的には大きな差です。

fetchは
・第2引数にPOSTやPUTを指定
・第2引数にbodyを指定、データをJsonに変換して入れる
という手間が発生しています。

Jsonに変換する必要がないのは結構楽ですね。

DELETE

{id : 1}の方を削除する想定です。
削除後は「ナイス削除!」と開発者に伝えます。

・Fetch

  const deleteData = { id: "1" };

  fetch("https://sample/sample", { method: "DELETE", body: JSON.stringify(deleteData) })
       .then((response) => console.log("ナイス削除!"));

・Axios

  const deleteData = { id: "1" };

  axios.delete("https://sample/sample", { data: deleteData })
       .then((response) => console.log("ナイス削除!"));

Axios側はDeleteのみ {data: 削除するオブジェクト}という形に変更されています。

Deleteは危険だからわざとdataという一手間かけて
他のメソッドと間違えないようにしてんのかな~って感じですね。知らんけど。

エラー時の振る舞いの違い

・Fetch
404や500エラーが出てもそのまま進みます。
200系だけ取りたい場合は「response.ok」での判定を挟む必要があります。

・Axios
404や500も一括でエラー処理できます。
「200系か、それ以外か。」で分かれます。

まとめ

いかがでしたでしょうか。

僕はAxios派ですが、正直どちらを使っても数行の差になると思うので、
好みに依るところが強いかなーと思います。

大事なのはどちらも書けるようにしておくことですね。

今回はこまで!
/** Enjoy Hacking!! **/