質問
APIリクエストしたいです。
自分なりに試した所、以下の通り2点の問題が発生しました。
これらの問題が発生しないようにするには、どのようにAPIリクエストやデータ管理をするのが適切なのでしょうか。
ファイル構成
問題点1(試したこと1)
この方法は/api/servers
に2回リクエストしてしまう問題があります。
- App.js
js
1const app = new Vue({ 2 router, 3 components: { App }, 4 data () { 5 return { 6 servers: [] 7 } 8 }, 9 template: '<App/>', 10 async mounted() { 11 // serversが空ならAPIリクエストして初期化する 12 if (this.servers.length === 0) { 13 await this.getServers() 14 } 15 }, 16 methods: { 17 getServers: async function () { 18 let response = await fetch('/api/servers') 19 let json = await response.json() 20 this.servers = json 21 } 22 } 23}) 24 25app.$mount('#app')
- Index.vue
js
1export default { 2 data () { 3 return { 4 selectedServerId: null 5 } 6 }, 7 async mounted () { 8 // serversが空ならAPIリクエストして初期化する 9 if (this.$root.servers.length === 0) { 10 await this.$root.getServers() 11 } 12 13 // serversの最初の要素をデフォルト値とする 14 this.selectedServerId = this.$root.servers[0].id 15 } 16}
問題点2(試したこと2)
この方法は/api/servers
にリクエストする前にIndex.vue
のmounted()
処理が実行されてしまう為、エラーが発生しています。
- App.js
省略。「試したこと1」と変化なし。
- Index.vue
js
1export default { 2 data () { 3 return { 4 selectedServerId: null 5 } 6 }, 7 async mounted () { 8 // serversが空ならAPIリクエストして初期化する 9 // if (this.$root.servers.length === 0) { 10 // await this.$root.getServers() 11 // } 12 13 // serversの最初の要素をデフォルト値とする 14 this.selectedServerId = this.$root.servers[0].id 15 } 16}
環境
Vue.js 2.5.7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。