Как создать массив из поля массива вычисляемых свойств в vue?

#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;
  },
}