Я искал возможные ответы на мой вопрос, но больше не мог найти предложений.
Структура моего проекта следующая. У меня есть PoolMainPage, где я показываю некоторую информацию об объекте activePool
. Внутри 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
из конечной точки и получать его, используя свойство computed в каждом из созданных мной компонентов: TeamSelector
и PoolStandings
?
Все помощь / предложения приветствуются! Дайте мне знать, если что-то неясно или требуется дополнительная информация.
Спасибо!
Jeroen