私は自分の質問に対する可能な答えを探し回っていましたが、それ以上の提案は見つかりませんでした。
私のプロジェクトの構成は次のとおりです。activePool
オブジェクトの情報を表示するPoolMainPageがあります。中には、PoolMainPage
サブページ(TeamSelector
およびPoolStandings
)に移動するオプションがあり、activePool
オブジェクトの情報も必要です。
activePoolオブジェクトは、Vuexストアのエンドポイントからフェッチされます。そのためのコードは次のとおりです。
const actions = {
getActivePool({ commit }) {
const config = {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
withCredentials: true
}
const activePoolId = localStorage.getItem('activePoolId')
if (activePoolId) {
return axios.get('/pools/pool-information?poolId=' + activePoolId, config)
.then((response) => {
commit('SET_ACTIVE_POOL', response.data)
return response
})
.catch((error) => {
return Promise.reject(error)
})
} else {
commit('SET_ACTIVE_POOL', null);
return;
}
}
}
エンドポイントはその役割を果たし、activePool
オブジェクトを返します。私のPoolMainPage
コンポーネント(およびサブコンポーネント)では、次のコマンドを使用して、このアクションを呼び出し、オブジェクトをフェッチします。
created() {
if (!this.$store.getters.activePool) {
this.$store.dispatch("getActivePool");
}
},
ページが更新され、activePool
がすでに設定されているたびにエンドポイントが呼び出されないようにするためのチェックを追加しました。実際にactivePool
コンポーネントにロードするために、計算されたプロパティを作成しました。
computed: {
activePool() {
return this.$store.getters.activePool;
},
},
これはすべて、エンドポイントがデータを返したときに機能しますが、その前に、activePool
オブジェクトに依存する別の計算されたプロパティでエラーが発生します。
maxToSpend() {
return this.activePool.inGameBudget;
},
質問1:実際に設定さmaxToSpend
れるまで計算されないようにするにはどうすればよいactivePool
ですか?単純にチェックを追加することもできif (this.activePool) {
ますが、計算されたすべてのプロパティに対してそれを行う必要があります。
質問2:これが可能かどうかはわかりませんがactivePool
、エンドポイントからをフェッチし、作成した各コンポーネント内の計算されたプロパティを使用して取得するコードを追加する必要がないことを確認するにはどうすればよいですか?TeamSelector
およびPoolStandings
?
すべてのヘルプ/提案は大歓迎です!不明な点がある場合や追加情報が必要な場合はお知らせください。
ありがとう!
ジェロエン
activePoolが実際に設定されるまでmaxToSpendが計算されないようにするにはどうすればよいですか?
基本的にそれはできません。計算されたプロパティは、コンポーネントの作成直後に計算されます。ライフサイクル図を参照してください。計算されたプロパティは、初期注入と反応性状態で計算されます。
if(this.activePool){の場合、追加のチェックを追加するだけで済みますが、計算されたすべてのプロパティに対してそれを行う必要があります。
ゲッターを使用する場合:
state: {
...
},
getters: {
maxToSpend: state => {
if (!state.activePool) return
return state.activePool.inGameBudget
}
},
actions: {
...
}
次に、次のように使用できます。
computed: {
maxToSpend () {
return this.$store.getters.maxToSpend
}
}
これが可能かどうかはわかりませんが、エンドポイントからactivePoolをフェッチし、作成した各コンポーネント内の計算プロパティを使用して取得するコードを追加する必要がないことを確認するにはどうすればよいですか:TeamSelectorとPoolStandings?
基本的にはありません。ただし、TeamSelectorとPoolStandingsの両方に共通の親(PoolMainPageである可能性があります)がある場合は、その親から1回だけ呼び出すことができます。
私の意見では、必要なすべてのページに必須のアクションを明示的にディスパッチする方法は悪い考えではありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加