Vuexはシンプルなショッピングカートを実装します

Vuexはシンプルなショッピングカートを実装します

この記事では、参考までに、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 }} &nbsp;&nbsp; 在庫: {{ 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 を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • vuex ベースのショッピングカート機能の実装
  • Vuex は小さなショッピングカート機能を実装します
  • Vuexはショッピングカートの追加、削減、削除を実装します
  • Vuex がショッピングカート機能を実現
  • vuex を使用してショッピングカート機能をエレガントに実装するサンプルコード
  • vuex で実装されたシンプルなショッピングカート機能の例
  • vuexを使用してショッピングカートH5ページのサンプルコードを作成しました
  • Vuex はシンプルなショッピングカート機能を実装します

<<:  Vue でシンプルな無限ループスクロールアニメーションを実装する例

>>:  JSはオンラインでのアナウンスのスクロール効果を実現します

推薦する

MySQL 8.0 の新機能の分析 - トランザクション データ ディクショナリとアトミック DDL

序文トランザクション データ ディクショナリとアトミック DDL は、MySQL 8.0 で導入され...

mysqlを完全にアンインストールします。個人テストです!

MySQL をクリーンアンインストールします。個人的にテストしたところ、今回はようやくうまくいきま...

Linux で大容量メモリ ページを持つ Oracle データベースを最適化する方法

序文PC サーバーは今日まで発展を続け、パフォーマンスにおいて大きな進歩を遂げてきました。 64ビッ...

VMware仮想マシンの起動時に黒い画面が表示される問題を解決する

# VMware ハードディスクの起動優先順位を調整するステップ 1: 電源をオンにすると、BIOS...

dockerコンテナにviコマンドをインストールする簡単な操作

docker コンテナを使用する場合、vim がインストールされていないことがあり、vim コマンド...

Vue コンポーネント値転送中のデータ損失の分析と解決

序文前回の記事では、JavaScript の 2 つのデータ型、基本型と参照型、および参照型の浅いコ...

Chrome をクラッシュさせる CSS コードの行

一般的な CSS コードでは、UI レイアウトや互換性に関して軽微な問題が発生するだけです。しかし、...

Windows Server 2016 に MySQL 5.7.19 の解凍バージョンをインストールするための詳細なチュートリアル

MySQL 5.7.19 winx64 解凍版のインストールチュートリアルを収録しています。具体的な...

docker mysqlの起動時に初期化SQLを実行する

1.Mysqlイメージを取得するdocker pull mysql:5.7 2. MySQLイメージ...

MySQLテーブルの自動インクリメント列の初期値をリセットする方法

MySQLテーブルの自動インクリメント列の初期値をリセットする方法1. 問題の説明MySQL データ...

Centos7.3 Nginx をインストールして展開し、https を設定する方法

設置環境1. gccのインストールnginxをインストールするには、まず公式サイトからダウンロードし...

LinuxサーバーにVueプロジェクトをデプロイする

ケース1 vue-cliはvue3プロジェクトをビルドし、プロジェクトをLinuxサーバーにアップロ...

innodb_flush_method 値メソッド (例の説明)

innodb_flush_methodのいくつかの典型的な値 fsync: InnoDB は fs...

適応分析と応答分析の違いを専門用語で詳しく説明

日々の開発経験と関連するオンライン情報に基づいて、アダプティブとレスポンシブの違いをシンプルでわかり...

Ubuntu 12.04 でカーネルツリーを構築する実装プロセスの詳細な説明

まず使用しているカーネルのバージョンを確認してくださいlin@lin-仮想マシン:~$ uname ...