Использую vuex для хранения, получения и возврата данных компонентам. Получил $store, получил данные.
В документации Vuex указывается, что желательно использовать getters для получения данных.
const store = new Vuex.Store({
state: {
news: [],
},
getters: {
news: (state) => state.news
},
...
});
export default {
...
computed: {
news () {
console.log(this);
console.log(this.$store.getters.news);
return this.$store.getters.news;
}
},
...
}
Однако в консоли выводится "пустой" объект с нулевой длиной под именем:
[__ob__: xe]
При этом в this информация по новостям в $store есть. В чём может быть причина ошибки?
UPD:
Ошибка оказалась до банальности простой. Т.к. я делаю ajax запрос, то ответ приходит не мгновенно, тогда как рендеринг и пр. происходит сразу.
Следовательно получается, что с одной стороны, информация о новостях есть, т.к. ответ пришёл и изменения были внесены в vuex. Но в момент рендеринга данных не было, поэтому в консоли не было информации о нужной мне переменной/массиве. По крайне мере я так понимаю проблему.
Для её решения нужно:
- перенести получение по ajax из actions напрямую в компонент, при этом делать изменения состояния vuex через мутации
- использовать асинхронные функции или модули типа vue-async-computed