Хочу сделать интернет магазин на vue и pinia, но при добавлений товаров в коризну страница не рендерится

Всем привет, я новичок и пытаюсь сделать интернет магазин на vue, а для управления состоянием использую pinia, у меня все работает, но почему-то при добавлений товаров в корзину страница не рендерится. Но если обновить терминал, то страница тоже обновляется и товары отображаются. Но если добавить товар в моменте, в массиве он появляется, а картинка на странице нет...

прошу прощения за такое ужасное объяснение )))0

App.js

<template>
  <div id="app">
    <MainWrapper/>
  </div>
</template>

<script>
import MainWrapper from './components/MainWrapper.vue'

export default {
  name: 'App',
  components: {
    MainWrapper
  }
}
</script>

<style>

@import url(https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic|Material+Icons);
#app {
  font-family: "Roboro", sans-serif;
  text-align: center;
}

</style>

main.js

import {createPinia } from 'pinia'
import { createApp } from 'vue'
import App from './App.vue'
import  router  from './router/router'


createApp(App).use(createPinia()).use(router).mount('#app') 

MainWrapper.vue

<template>
  <div class="MainWrapper">
    <CatalogPage/>
    
    <CartPage 
    :cart_data="store.CART"
    />
  </div>
</template>

<script>
/* import CatalogPage from './CatalogPage.vue'
import CartPage from './CartPage.vue' */
import {useProduct} from '../pinia/store'

export default {
  name: 'MainWrapper',
  setup () {
      const store = useProduct()
      return {
            store
        }
    },
  components: {
/*     CatalogPage,
    CartPage */
  },
  props: {}
}
</script>


<style>

.MainWrapper {
    max-width: 900px;
    margin: 0 auto;
}

</style>

CatalogPage.vue

<template>
    <div class="catalogPage">

      <div class="link_to_cart">Корзина: {{ store.CART.lenght }}</div>
        
    <CatalogItem
      v-for="product in store.productComponent"
      :key="product.id"
      :product_data="product"
      @addToCart="addToCart"
    />

    </div>
</template>

<script>

import CatalogItem from './CatalogItem.vue'
import {useProduct} from '../pinia/store'


export default {
    name: 'catalogPage',
    setup () {
      const store = useProduct()

      return {
            store,
        };
    },
    components: {
        CatalogItem

    },
    methods: {
        addToCart (data) {
          this.store.SET_CART(data)
        }
    },
    computed: {}
        
}
</script>

<style>

.catalogPage {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: center;
    margin-top: 80px;
}

.link_to_cart {
  position: absolute;
  top: 6px;
  right: 6px;
  padding: 10px;
  border-radius: 25px;
  border: solid 1px #aeaeae;
}

</style>

CatalogItem.vue

<template>
    <div class="catalogItem">
     <img :src="product_data.image" class="catalog-item-image" alt="img">
      <p class="catalog-item-name">{{ product_data.name }}</p>
      <p class="catalog-item-price"> Цена: {{ product_data.price }}P</p>

    <button 
        class="catalog-item-add-to-btn btn" 
        @click="addToCart"> 
        В корзину 
    </button>

    </div>
</template>

<script>
export default {
    name: 'catalogItem',
    props: {
      product_data: {
        type: Object,
        default () {
          return {}
        }
      }
    },
    methods: {
        addToCart () {
            this.$emit('addToCart', this.product_data)
        }
    }
        
}
</script>

CartPage.vue

<template>
    <div class="cart-page">
        <h1>Корзина</h1>

    <CartItem  
      v-for="(cart, index) in store.CART"
      :key="cart.id"
      :cart_item_data="cart"
      @deleteCart = "deleteCart(index)"
    />
    </div>
</template> 

<script>

import CartItem from './CartItem.vue'
import {useProduct} from '../pinia/store'
    
export default {

    name: 'cart-page',
     setup () {
       const store = useProduct()
       return {
             store
         };
     },
    components: {
        CartItem
    },

    computed: {},
    mounted () {
    console.log(this.store.CART)
  },
     props: {
          cart_data: {
             type: Array,
              default () {
                 return []
              }
          }
      },

      methods: {
        deleteCart (index) {
            this.store.DELETE_FROM_CART(index)
        }
      }
}
</script>

<style lang="scss" scoped>

</style>

CartItem.vue

<template>
    <div class="cart-page">
        <h1>Корзина</h1>

    <CartItem  
      v-for="(cart, index) in store.CART"
      :key="cart.id"
      :cart_item_data="cart"
      @deleteCart = "deleteCart(index)"
    />
    </div>
</template> 

<script>

import CartItem from './CartItem.vue'
import {useProduct} from '../pinia/store'
    
export default {

    name: 'cart-page',
     setup () {
       const store = useProduct()
       return {
             store
         };
     },
    components: {
        CartItem
    },

    computed: {},
    mounted () {
    console.log(this.store.CART)
  },
     props: {
          cart_data: {
             type: Array,
              default () {
                 return []
              }
          }
      },

      methods: {
        deleteCart (index) {
            this.store.DELETE_FROM_CART(index)
        }
      }
}
</script>

<style lang="scss" scoped>

</style>

store.js

import { defineStore } from 'pinia'


export const useProduct = defineStore ('product', {

    state: () => {
        return {
            products: [
                {
                  id: 1,
                  name: 'Сыворотка',
                  image: 'https://cdn1.ozone.ru/s3/multimedia-z/6011528891.jpg',
                  price: 1200
                },
                {
                  id: 2,
                  name: 'Тоник для лица',
                  image: 'https://diamondelectric.ru/images/3211/3210266/tonik_mixit_1.jpg',
                  price: 900
                },
                {
                  id: 3,
                  name: 'Эссенция',
                  image: 'https://express-china.ru/upload/iblock/d88/d889b582d38ec86503a8980091659186.jpg',
                  price: 1400
                },
                {
                  id: 4,
                  name: 'Гидрофильное масло',
                  image: 'https://goodcream.ru/upload/iblock/696/vf5tkdgfrom1ead12jr9bowbjj4odvca.png',
                  price: 500
                },
                {
                  id: 5,
                  name: 'Пенка',
                  image: 'https://www.letu.ru/common/img/marketplace/eb696d3e-6fbf-4f0d-be64-7e45566f5b8d.jpg',
                  price: 800
                },
                {
                  id: 6,
                  name: 'Крем',
                  image: 'https://novosibirsk.uteka.ru/media/1024/3/b6/3b650b12626c6eafcd7bfc53f8531f3f.jpg',
                  price: 1000
                },
                {
                  id: 7,
                  name: 'Тон',
                  image: 'https://akvarel-shop.ru/images/detailed/42/103688.jpg',
                  price: 600
                },
                {
                  id: 8,
                  name: 'Тени',
                  image: 'https://www.letu.ru/common/img/uploaded/skuImageFolder/GIV080933_mainGT.jpg',
                  price: 1500
                },
                {
                  id: 9,
                  name: 'хз',
                  image: 'https://www.letu.ru/common/img/uploaded/skuImageFolder/GIV080933_mainGT.jpg',
                  price: 1350
                },
              ],
            StoreCart: []
        }

    },
  
    getters: {
        productComponent () {
            return this.products
        },

        CART() {
            return this.StoreCart
        }
    },

    actions: { 

      SET_CART(object) {
        this.StoreCart.push({...object})
      },

      DELETE_FROM_CART (index) {
        this.StoreCart.slice(index, 1)
      }
      
    },
    

})

![примерно так выглядит, но если обновить, то все исчезнет и при добавлений товары не будут отображаться]


Ответы (0 шт):