In this article、それは言う:コンポーネントでAxiosまたはHTTPコールを使用するのが不適切な理由は何故ですか?
それは一般的に貧しい人々の練習ですが、あなたは方法、ライフサイクルフック、またはたびからデータをフェッチするために、あなたのコンポーネントに直接Axiosを使用することができます。
私はなぜだろうか?私は通常ライフサイクルのフックを使ってデータを取得します(特にcreated()
から)。私たちはどこに要求の呼び出しを書く必要がありますか?
In this article、それは言う:コンポーネントでAxiosまたはHTTPコールを使用するのが不適切な理由は何故ですか?
それは一般的に貧しい人々の練習ですが、あなたは方法、ライフサイクルフック、またはたびからデータをフェッチするために、あなたのコンポーネントに直接Axiosを使用することができます。
私はなぜだろうか?私は通常ライフサイクルのフックを使ってデータを取得します(特にcreated()
から)。私たちはどこに要求の呼び出しを書く必要がありますか?
API
メソッドをコンポーネントに直接書き込むとコード行が増え、読みにくくなります。私の知る限りauthor
がService
にAPI
方法を分離するために示唆されたと考えているよう 。
top posts
を取得してデータを操作する必要がある場合を考えてみましょう。あなたがコンポーネントで、それが再利用されていないことを行う場合は、あなたがそれを使用したい、これまで他のコンポーネントで、それを複製する必要があります。
export default {
data:() => ({
top: [],
errors: []
}),
// Fetches posts when the component is created.
created() {
axios.get(`http://jsonplaceholder.typicode.com/posts/top`)
.then(response => {
// flattening the response
this.top = response.data.map(item => {
title: item.title,
timestamp: item.timestamp,
author: item.author
})
})
.catch(e => {
this.errors.push(e)
})
}
}
だから、あなたはコードを複製する必要が別のコンポーネントにtop post
をフェッチする必要がある場合。
ここでAPI methods
をService
に入れてみましょう。
api.js file
const fetchTopPosts = function() {
return axios.get(`http://jsonplaceholder.typicode.com/posts/top`)
.then(response => {
// flattening the response
this.top = response.data.map(item => {
title: item.title,
timestamp: item.timestamp,
author: item.author
})
}) // you can also make a chain.
}
export default {
fetchTopPosts: fetchTopPosts
}
したがって、上記のAPI methods
を任意のコンポーネントで使用します。この後
:
import API from 'path_to_api.js_file'
export default {
data:() => ({
top: [],
errors: []
}),
// Fetches posts when the component is created.
created() {
API.fetchTopPosts().then(top => {
this.top = top
})
.catch(e => {
this.errors.push(e)
})
}
}
小規模なアプリケーションやウィジェットでは問題ありませんが、実際のSPAではAPIをモジュールから除外し、vuexを使用する場合はアクションを使用してapiモジュールを呼び出してください。
あなたのコンポーネントはそのデータが来ているところから方法とでconcerneredすべきではありません。コンポーネントは、AJAXではなくUIを担当します。
上記の例ではimport api from './api.js'
created() {
api.getUsers().then(users => {
this.users = data
})
}
// vs.
created() {
axios.get('/users').then({ data }=> {
this.users = data
})
}
、あなたの「axiosフリー」のコードは実際にはるかに短いではありませんが、あなたが潜在的にコンポーネントの外に保つことができるものの画像:HTTPエラーを処理
FormData
作成コンポーネントリストが長くなることがあります。そのすべてはビューに関係しないためコンポーネントに属しません。ビューには結果のデータまたはエラーメッセージのみが必要です。
これは、コンポーネントとAPIを個別にテストできるということも意味します。
どうもありがとう!今、私は分かる。 –
誰かがこれについて興味深い記事を書いています:https://vuejsdevelopers.com/2017/08/28/vue-js-ajax-recipes/ –