action в котором получаются данные и пишутся в state (async/await).
На странице я делаю фильтрацию данных которые получаю через getter.
Когда я загружаю страницу она пытается отфильтровать данные которых ещё нет в state из-за чего всё падает.
Как дождаться полной отработки получения данных и только тогда работать с ними?
почему падает-то? если данных нет, то у тебя просто пустой массив, который ничего ломать не должен
Не суть важно, падает или возвращает пустой массив. Суть вопроса именно в том, как мне сначала загрузить все данные в store, и лишь потом везде с ними работать?
грузи их, например, в корневом компоненте там по завершению загрузки - сетишь данные в стор и флаг какой-нибудь проставляешь завершения загрузки но вводных все равно как-то мало )
в том же сторе можешь держать условный признак загрузки данных и по нему отрисовывать компоненты
Понял, спасибо. Покопаю в эту сторону.
да не за что вроде вообще ж непонятно, что-то нормальное посоветовал или нет)
Если чуть подробнее. Я пишу мобильно приложение. При загрузке оно получает асинхронно данные из внутреннего хранилища телефона, пишет их в store. В main.js тут вызывается action. async beforeCreate() { await this.$store.dispatch("loadBoxes"); }, Он получается список коробок из внутреннего хранилища телефона, и пишет их в store. async loadBoxes({ commit }) { const { value } = await Storage.get({ key: "boxes" }); if (!value) { await Storage.set({ key: "boxes", value: JSON.stringify([]), }); commit("loadBoxes", []); } else { commit("loadBoxes", JSON.parse(value)); } }, На странице одной коробки, я ищу в этих данных по айдишнику из роутера нужный, и записываю в data что бы отобразить computed: { ...mapState({ allBoxes: (state) => state.boxes, }), } getSingleBoxInfo() { const boxInfo = this.allBoxes.find( (box) => box.id === this.$route.params.id ); this.moneyBox = { ...boxInfo, startDate: this.convertDate(boxInfo.startDate), endDate: this.convertDate(boxInfo.endDate), }; }, И вот тут уже возникает ошибка Cannot read property 'startDate' of undefined" так как boxInfo ещё пустой и соответственно он не может найти в нём startDate.
Обсуждают сегодня