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はオンラインでのアナウンスのスクロール効果を実現します

推薦する

HTML 再利用テクニック

HTML の再利用は、あまり話題に上らない言葉です。今日は、この問題を次のようにまとめたいと思います...

Nginx プロキシ axios リクエストと注意事項

序文最近、小さなデモを作成しました。大規模な工場のオンライン データを使用したため、インターフェイス...

docker ストレージを使用して Exit を実行すると、サーバーへのファイルのアップロードが失敗する問題と解決策

1. 問題の説明Docker コンテナにインストールされているストレージが終了状態になっているため、...

Windows 10 で MySQL を完全にアンインストールして再インストールするための詳細な手順

さまざまな理由で、誰もが MySQL を再インストールする必要があると思います。 MySQL と Q...

Linuxはデュアルネットワークカードボンドとドライバーインターフェースを使用する

債券とは何かNIC ボンドは、実稼働シナリオでよく使用されるテクノロジーです。複数の NIC を 1...

Ubuntu 18.04 向け VMware Tools のインストールと構成のチュートリアル

この記事では、Ubuntu 18.04でのVMware Toolsのインストールと設定について記録し...

React Diff Principle の詳細な分析

目次差分アルゴリズムレイヤーごとの比較同じタイプのコンポーネントを比較する同じタイプの要素の比較子ノ...

Vueのレスポンシブシステムの原理の詳細な説明

目次Vueのレスポンシブシステムの基本原則1. Object.definePropertyの使い方を...

Vue+express+Socketでチャット機能を実現

この記事では、チャット機能を実現するためのVue+express+Socketの具体的なコードを参考...

CSS3 アドバンス LESS で星空アニメーションを実装するサンプルコード

この記事では、星空アニメーションを実現するための高度な CSS3 LESS のサンプルコードを次のよ...

Navicat を使用して MySQL データベースをエクスポートおよびインポートする方法

MySql は、私たちが頻繁に使用するデータ ソースです。開発者が練習、小規模なプライベート ゲーム...

各グループの最新データを取得するためにMySQLベースのグループを実装する

序文:グループ化関数はグループ内の最初のデータを取得しますが、各グループ内の最新のデータを取得する必...

jsはショッピングカートの加算と減算、価格計算を実装します

この記事の例では、ショッピングカートの加算と減算、価格計算を実装するためのjsの具体的なコードを共有...

Docker で LNMP 環境を素早く構築する方法 (最新)

序文ヒント: ここで、この記事に記録するおおよその内容を追加できます。例えば、人工知能の継続的な発展...

IMG での UserMap の使用例

usemap は <img> タグの属性であり、使用するイメージ マップの名前を指定する...