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

推薦する

React Nativeがシミュレータにリンクできない件について

React Native は、現在人気のオープンソース JavaScript ライブラリ React...

GitHub のサードパーティ認証方式を Vue で実装する例

目次OAuth アプリの作成コードを取得するaccess_tokenを取得するユーザー情報を取得する...

MySQL データベース内の同じテーブルを同時にクエリして更新する方法

通常のプロジェクトでは、1 回の入札で同時にデータを更新および照会する必要があるという問題によく遭遇...

HTML テーブルの境界線を設定する際のヒント

HTML を初めて使用する多くの人にとって、テーブル <table> は最もよく使用され...

CSS の歪んだ影の実装コード

この記事では、CSS ワープ シャドウの実装コードを紹介し、皆さんと共有します。詳細は以下の通りです...

MYSQLが中国語を認識できない問題の恒久的な解決策

ほとんどの場合、MySQL はインストールしたばかりのときは中国語をサポートしません。これはエンコー...

HiveメタデータをMySQLに設定するプロセス全体

Hiveのインストールディレクトリで、confディレクトリに入り、hive-site.xmlファイル...

MySQL 8.0.16 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.16圧縮パッケージのインストールと設定方法を参考までに紹介します。...

MySQL pt-slave-restart ツールの使い方の紹介

目次MySQL マスター スレーブ レプリケーション環境を設定する場合、マスター データベースとスレ...

Docker Compose で環境変数を参照する方法の例

プロジェクトでは、さまざまな条件や使用シナリオを制御するために、docker-compose.yml...

MySQL でレプリケーション フィルターを動的に変更する方法

MySQLはレプリケーションフィルターを動的に変更します今日遭遇した問題についてお話しします。今日は...

Mysql 8.0.17 winx64バージョンのインストール中に発生した問題を解決する

1. my.iniファイルを手動で作成して追加する # クライアントセクション # --------...

Vueのref属性の詳細な説明

要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS....

Linux で rpm パッケージを見つけるために CD をマウントする方法

前面に書かれたLinux を使用する際にソフトウェアをインストールする必要がある場合があります。もち...

nginxでの共有メモリの使用に関する詳細な説明

nginx プロセス モデルでは、トラフィック統計、トラフィック制御、データ共有などのタスクを完了す...