@dragon11
web программист

Как в компоненте получить данные из хранилища?

Как получить данные из productName?

comp.vue:

export default {
    data() {
        return {
            productName: this.$store.state.products
        }

store.js

export default {
    state: {
        products: [],
        productName: []
    },
    mutations: {
        LOAD_ALL_PRODUCTS(state, payload) {
            state.products = payload
        }
    },
    actions: {
        async loadAllProducts({commit}) {
            try {
                let res = await Vue.axios.get('/products/')
                commit('LOAD_ALL_PRODUCTS', res.data)
            } catch(err) {
                 console.log(err)
            }
        }
    },
    getters: {
        getProducts: state => state.products,


mounted() {
        console.log(this.productName);

Выдаёт следующее:
5c74be730bae5026802619.png
  • Вопрос задан
  • 3933 просмотра
Решения вопроса 1
@karambafe
Если вы хотите подписаться на данные из store, то используйте computed properties:

export default {
  computed: {
    productName() {
       return this.$store.state.products.map(product => product.name);
    },
  },
};


В store же вообще не надо заводить отдельный стейт productName, потому что это вычисляемое значение относительно стейта products - можно объявить как отдельный getter productName в Vuex, а можно получить через computed в компоненте как описано выше

Геттеры Vuex
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
dima9595
@dima9595
Junior PHP
res.data.products и в v-for!?
Ответ написан
Lumore
@Lumore
Front-end developer
Нужно использовать computed:

<template>
  <div>
    <div v-for="(product, index) in products" :key="index">{{product.name}}</div>
  </div>
</template>


export default {
  computed: {
    products () {
      return this.$store.state.products
    }
  }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы