#vue.js #vuex
#vue.js #vuex
Вопрос:
У меня есть вычисляемое свойство, которое извлекает некоторые данные из моего хранилища vuex следующим образом:
computed: {...mapGetters(["allCategories"])},
Каждый category
из this.allCategories
них выглядит так:
{ "id": "123", "name": "Foo" }
Я хочу извлечь каждое name
поле this.allCategories
до того, как компонент будет смонтирован, поместив каждое name
в вызываемое свойство реактивных данных categoryNames
.
Как я могу этого добиться?
То, что я пробовал до сих пор, приведено ниже:
beforeMount() {
for (let i = 0; i < this.allCategories.content.length; i ) {
var name = this.allCategories.content[i].name
this.categoryNames.push(name);
}
},
Что выдает следующую ошибку:
Error in beforeMount hook: "TypeError: Cannot read property 'length' of undefined"
this.allCategories
выглядит так:
{
"content": [
{
"id": "efb038df-4bc9-4e31-a37a-e805c9d7294e",
"parentCategoryId": "8ffc214f-fff1-4433-aac9-34d13b4e06c5",
"name": "Foo"
},
{
"id": "5905d437-db2e-4f91-8172-c515577b86e9",
"parentCategoryId": "5905d437-db2e-4f91-8172-c515577b86e9",
"name": "Bar"
},
{
"id": "8ffc214f-fff1-4433-aac9-34d13b4e06c5",
"parentCategoryId": "8ffc214f-fff1-4433-aac9-34d13b4e06c5",
"name": "Baz"
}
],
"number": 0,
"size": 100,
"total": 3
}
Ответ №1:
Вы могли бы использовать созданный хук для вызова действия vuex, которое вызывает мутацию vuex, которая захватывает состояние, выполняет синтаксический анализ и сохраняет проанализированные данные в новом массиве в состоянии, затем использует геттер для извлечения проанализированного массива из состояния.
created() {
this.$store.dispatch('someAction');
},
computed: {
...mapGetters({
parsedArray: 'getParsedArray',
})
}
export const actions = {
someAction({ commit }) {
commit('SOME_MUTATION');
},
}
export const mutations = {
SOME_MUTATION(state) {
let data = state.originalData;
let parsedArray = [];
// Do parsing work here
state.parsedArray = parsedArray
},
}
export const getters = {
getParsedArray: state => {
return state.parsedArray;
},
}