🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2964閲覧

【Vue】APIレスポンスがエラーのとき、エラー内容をフラッシュメッセージで表示させる方法が分かりません

nomu_lui

総合スコア11

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/01/30 00:24

前提・実現したいこと

storeに定義したaxiosで楽天APIを叩いていて、エラーがレスポンスが返ってきた時、
そのエラー内容をフラッシュメッセージで表示させてたいのですが、
その考え方が分からないので、アドバイスいただけないでしょうか。

consoleにはエラー内容が表示されるところまではできました。

イメージしているのは、返ってきたエラー内容を、error.vueなどのコンポーネントに受け渡してあげるようなもので合っていますでしょうか?

よろしくお願いいたします。

該当のソースコード

イメージ説明
「あ」と一文字で検索すると、エラーが返ってきます。楽天APIで、二文字以上で検索するよう、定められているからです。
イメージ説明

error_description: "keyword is not valid"の部分を、「二文字以上のキーワードで検索してください」といったフラッシュメッセージを表示させたいです。

store.js

Vue

1function searchItem(keyword) { 2 return axios.get( 3 "https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706", 4 { 5 params: { 6 applicationId: XXXXXXXXXXXXXXXXXXXXX, 7 keyword: keyword, 8 }, 9 } 10 ); 11} 12 13 search({ commit, state }) { 14 searchItem( 15 state.keyword, 16 ) 17 .then((res) => { 18 commit("search", res.data); 19 }) 20 .catch((error) => { 21 console.log(error.response.data); 22 }); 23 },

試したこと

ググっても、フォームのバリデーションの記事ばかりで、望んでいる実装の情報が見つけられませんでした。

補足情報(FW/ツールのバージョンなど)

vue 2.6.12
webpacker(vue CLIではありません)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ご質問拝見いたしました。

storeにerror等と用意して、エラーメッセージを表示したい画面で保持したerrorを表示するのはいかがでしょうか?

また、error内容が決まっているのであれば、文字列を比較して表示したいメッセージをstoreに用意したerrorに保持してあげれば良いと思いました。

安易な考えですが、以下のイメージです。

Vue

1search({ commit, state }) { 2 searchItem( 3 state.keyword, 4 ) 5 .then((res) => { 6 commit("search", res.data); 7 }) 8 .catch((error) => { 9 if (error.respose.data.error_description === "keyword is not valid") { 10 this.error = "二文字以上のキーワードで検索してください"; // storeに保持しているerrorに代入 11 } 12 }); 13 }

画面側では、storeにerrorがあれば、エラーメッセージを表示するなど

ご質問とずれていましたらすみません。

投稿2021/01/30 17:43

Twoshi

総合スコア354

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問