#概要
axios.get.thenでAPIを呼びjsonを取得する関数を作成しようとしたが、
axiosは非同期処理のためreturnでjsonを返すことができなかった。
callback関数を用いることでjsonを取得できる。
#やり方
以下のjsファイルを作成
Api.js
import axios from "axios"
function callApi(url, callback) {
console.log()
axios
.get(url, { /*オプションがあれば書く*/ })
.then(response => {
callback(response)
})
.catch(e => {
console.log("Error occurred in API")
console.log(e)
});
}
export default {callFreadApi}
Vueコンポーネントからの呼び出しは以下
component.vue
<template>
<p>{{ info }}</p>
</template>
<script>
import Api from "./Api"
export default {
name: "Component",
components: { Api },
data() {
return {
info: ""
}
},
methods: {
setInfo: function(info){
this.info = info
},
callApi(url){
Api.callApi(url, this.setInfo)
}
},
mounted() {
this.callApi("呼びたいAPIのURL")
}
};
</script>
<style>
</style>
上記コンポーネントからcallApiを呼ぶことでjson結果を取得できる。
流れとしては
- コンポーネントにApi.jsをインポートする。
- Api.jsからcallApiを呼び出す。
- callApiのなかでjson結果を取得し、コールバック関数(上記例ではsetInfo)に渡す。
- setInfoでVueコンポーネントのdataにjson結果を代入する。
- コンポーネントでjson結果が扱える。