前提・実現したいこと
vuexのShopping Cart Exampleを試しています。
store/index.jsで定義した関数を実行するとエラーが出ます。
初歩的なところで躓いていそうですが、ご教授いただけますと幸いです。
発生している問題・エラーメッセージ
[Vue warn]: Unhandled error during execution of native event handler at <ProductList> at <Home onVnodeUnmounted=fn<onVnodeUnmounted> ref=Ref< Proxy {…} > > at <RouterView> at <App> Uncaught TypeError: _ctx.toCart is not a function at onClick at callWithErrorHandling at callWithAsyncErrorHandling at HTMLButtonElement.invoker
該当のソースコード
vue
1//ProductList.vue 2 3<template> 4 <div class="hello"> 5 <ul> 6 <li v-for="product in products" :key="product.id"> 7 {{ product.title }} 8 <br /> 9 <button @click="toCart(product)">Add to cart</button> 10 </li> 11 </ul> 12 </div> 13</template> 14 15<script> 16export default { 17 computed: { 18 products() { 19 return this.$store.state.products 20 }, 21 }, 22 created() { 23 this.$store.dispatch('getAllProducts') 24 }, 25} 26</script> 27
javascript
1//index.js 2 3import { createApp } from 'vue' 4import { createStore } from 'vuex' 5import shop from '@/api/shop.js' 6 7export default createStore({ 8 state: { 9 products: [], 10 items: [], 11 }, 12 mutations: { 13 setProducts(state, products) { 14 state.products = products 15 }, 16 pushProductToCart(state, product) { 17 state.items.push({ 18 id: product.id, 19 quantity: 1, 20 }) 21 }, 22 }, 23 actions: { 24 getAllProducts({ commit }) { 25 shop.getProducts((products) => { 26 commit('setProducts', products) 27 }) 28 }, 29 toCart({ commit }, product) { 30 commit('pushProductToCart', product) 31 }, 32 }, 33 getters: { 34 cartProducts: (state) => { 35 return state.items.map((item) => { 36 const product = state.products.find((product) => product.id === item.id) 37 return { 38 title: product.title, 39 price: product.price, 40 quantity: item.quantity, 41 } 42 }) 43 }, 44 }, 45 modules: {}, 46}) 47 48const app = createApp({}) 49 50app.use(createApp)
補足情報(FW/ツールのバージョンなど)
Vue.js 3.00 vuex 4.00
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/07 08:28
2021/08/07 10:06 編集
2021/08/07 12:22