У меня есть блог с некоторыми постами. При нажатии на предварительный просмотр вы будете перенаправлять на страницу сообщения. На странице поста я использую метод получения, чтобы загрузить правильный пост (я использую функцию find
, чтобы вернуть object.name
, который соответствует правильному объекту в массиве объектов).
const state = {
ricettario: [], // data that contains all recipes (array of objects)
}
const actions = {
// Bind State and Firestore collection
init: firestoreAction(({ bindFirestoreRef }) => {
bindFirestoreRef('ricettario', db.collection('____').orderBy('data'))
})
const getters = {
caricaRicetta(state) {
console.log('Vuex Getter FIRED => ', state.ricettario)
return nameParamByComponent => state.ricettario.find(ricetta => {
return ricetta.name === nameParamByComponent
})
}
}
В компоненте я вызываю метод получения в computed property
computed: {
...mapGetters('ricettaStore', ['caricaRicetta']),
ricetta() {
return this.caricaRicetta(this.slug) // this.slug is the prop of the URL (by Router)
}
}
Все происходит правильно, но когда я перезагружаю страницу в POST PAGE, метод получения запускается 2 раза:
1. вернуть ошибку, так как состояние нулевое
2. вернуть правильный объект
// экран ниже
Таким образом, все отлично работает спереди, но не в консоли и не в приложении.
Я думаю, что правильный способ - вызывать геттеры в хуке created
. Что я должен изменить? Это проблема с вычисляемым пропом, добытчиком или состоянием?
POST PAGE:
<template>
<div v-if="ricetta.validate === true" id="sezione-ricetta">
<div class="container">
<div class="row">
<div class="col s12 m10 offset-m1 l8 offset-l2">
<img
class="img-fluid"
:src="ricetta.img"
:alt="'Ricetta ' + ricetta.titolo"
:title="ricetta.titolo"
/>
</div>
</div>
</div>
</div>
<div v-else>
...
</div>
</template>