この記事では、参考までに、Vuex の具体的なコードを共有して、簡単なショッピングカートを実装します。具体的な内容は次のとおりです。 ファイル構造 アプリ.vue <テンプレート> <div id="アプリ"> <h3>ショッピングカートのデモ</h3> <時間> <h4>製品:</h4> <製品リスト /> <時間> <h4>マイカート</h4> <ショッピングカート /> </div> </テンプレート> <スクリプト> '@/components/ProductList' から ProductList をインポートします。 '@/components/ShoppingCart' から ShoppingCart をインポートします。 エクスポートデフォルト{ コンポーネント: 製品リスト、 ショッピングカート } } </スクリプト> 製品.vue <テンプレート> <div> <ul v-for="製品内のアイテム" :key="item.id"> <li> {{ item.title }} - {{ item.price }} 在庫: {{ item.inventory }><br> <button :disabled="!item.inventory" @click="addToCart(item)">カートに追加</button> </li> </ul> </div> </テンプレート> <スクリプト> 'vuex' から { mapGetters, mapActions } をインポートします。 エクスポートデフォルト{ 計算: { // ...mapGetters('products',{ // 製品: 'allProducts' // }) ...mapGetters({ 製品: 'products/allProducts' }) }, メソッド: { ...mapActions('cart',['addToCart']) }, 作成された() { this.$store.dispatch('products/getAllProducts'); } } </スクリプト> ショッピングカート <テンプレート> <div> <ul v-for="製品内のアイテム" :key="item.id"> <li>{{ item.title }} *{{ item.quantity }}</li> </ul> <div>合計: {{ total }}</div> </div> </テンプレート> <スクリプト> 'vuex' から { mapGetters } をインポートします。 エクスポートデフォルト{ 計算: { ...mapGetters('カート', { 製品: 'cartProducts', 合計: 'cartTotalPrice' }) } } </スクリプト> モジュール/製品.js '../../api' から api をインポートします。 定数状態 = { 全て: [] } const ゲッター = { allProducts: 状態 => state.all } 定数アクション = { // 初期製品データを取得する getAllProducts({ commit }) { api.getProducts(products => commit('setProducts', products)); } } const 変異 = { setProducts(状態、製品) { state.all = 製品; }, // この商品の在庫を減らす decreamentInventory(state, { id }) { productItem を state.all.find(item => item.id === id); とします。 製品アイテム.在庫 --; } } エクスポートデフォルト{ 名前空間: true、 州、 ゲッター、 行動、 突然変異 } モジュール/cart.js 定数状態 = { 追加されたリスト: [] } const ゲッター = { cartProducts(状態、ゲッター、ルート状態) { state.addedList.map((item, index) => { を返します。 productItem を rootState.products.all.find(product => product.id === item.id) とします。 戻る { タイトル: productItem.title, 価格: productItem.price、 数量: アイテム.数量 } }) }, cartTotalPrice(状態、ゲッター) { getters.cartProducts.reduce((total, product) => { を返します。 合計 + (product.price * product.quantity) を返します。 }, 0); } } 定数アクション = { addToCart({ 状態, コミット }, 製品) { (製品在庫 > 0) の場合 { productItem を state.addedList.find(item => item.id === product.id); とします。 if (製品アイテム) { commit('incrementItemQuantity', productItem); } それ以外 { コミット('pushItemToCart', 製品); } commit('products/decreamentInventory', product, { root: true }); } } } const 変異 = { // ショッピングカート内の同一アイテムの数を増やす increaseItemQuantity(state, { id }) { productItem を state.addedList.find(item => item.id === id) とします。 製品アイテム.数量++; }, // 商品をショッピングカートに追加する pushItemToCart(state, { id }) { 状態.追加されたリスト.push({ id、 数量: 1 }) }, } エクスポートデフォルト{ 名前空間: true、 州、 ゲッター、 行動、 突然変異 } ストア/index.js 'vue' から Vue をインポートします。 'vuex' から Vuex をインポートします。 './modules/cart' からカートをインポートします。 './modules/products' から製品をインポートします。 Vue.js で Vuex をビルドします。 デフォルトの新しいVuex.Storeをエクスポートします({ モジュール: カート、 製品 } }); メイン.js 「vue」からVueをインポートします。 「@/components/App.vue」から App をインポートします。 「@/store」からストアをインポートします。 Vue.config で productionTip を false に設定します。 新しいVue({ 店、 レンダリング: h => h(App) }).$mount("#app"); 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Vue でシンプルな無限ループスクロールアニメーションを実装する例
>>: JSはオンラインでのアナウンスのスクロール効果を実現します
目次概要機能性と読みやすさ空白括弧セミコロンインデント身元大文字と小文字を区別予約キーワード概要すべ...
1. はじめにこの記事では、Docker Swarm を使用して Nebula Graph クラスタ...
最近、「フットボール ナビゲーション」Web サイトに取り組んでいるときに、上部の固定ナビゲーション...
Docker コンテナが終了しても、デバッグを容易にし、ユーザー データを保持するために、デフォルト...
目次1. 切り替え方法2. タブを動的に生成する3. キャッシュコンポーネント3.1 キープアライブ...
目次1. Gojsの実装1. 描画2. 破線の実装3. 点線を動かす2. 点線と点線アニメーションの...
前書き: 最近、私はパートナーとチームを組んで .NET Core プロジェクトに取り組む予定です。...
数日前、Codepen で @Kyle Wetton が書いた、CSS ブレンディング モードと S...
Docker イメージの最初の行は FROM alpine などのイメージで始まりますが、最初のベー...
背景少し前にブラウザカメラの取得とスキャンコード認識の機能を作りました。その際の知識ポイントと具体的...
MySQL によって作成される最適化はインデックスを追加することですが、インデックスを追加しても目的...
テキストの長さに応じて、左側のテキストの幅を自動調整できる状況を実現したい。1行が表示できない場合、...
[LeetCode] 197.気温上昇Weather テーブルが指定されている場合、前の日付 (昨...
異なるデータベースで DROP TABLE を書く方法1.MySQL 存在する場合はテーブルを削除 ...
序文決まり文句です。ここでは、フロントエンドとバックエンドの分離についての私の理解についてお話ししま...