第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在更新時制作 vuex 狀態(tài)更新 UI?

如何在更新時制作 vuex 狀態(tài)更新 UI?

浮云間 2022-05-26 10:18:30
我正在使用 Vuejs 和 Vuex 構(gòu)建購物車頁面。購物車中的每件商品都應(yīng)有一個數(shù)量計數(shù)器,以增加或減少為此特定商品訂購的件數(shù)。當(dāng)我從主產(chǎn)品頁面將產(chǎn)品添加到購物車時,然后訪問購物車頁面。我點(diǎn)擊柜臺,產(chǎn)品數(shù)量發(fā)生了變化,但 UI 沒有顯示這種變化。它僅在我重新加載頁面后顯示更改,之后它可以僅顯示對該特定計數(shù)器的任何新更改,并且我必須在添加每個產(chǎn)品后重新加載才能使其計數(shù)器顯示 UI 更改。這是簡化的購物車 Vue 組件: <template >    <tbody>        <tr v-for="product in cartProducts" :key="product.name">            <td class="quantity">                <i class="fa fa-minus" @click="decreaseQuantity(product)"></i>                <p>{{product.quantity}}</p>                <i class="fa fa-plus" @click="increaseQuantity(product)"></i>            </td>        </tr>    </tbody></template><script>export default {    computed: {        cartProducts() {            return this.$store.state.cartProducts;        },    },    methods: {        increaseQuantity(drug) {            const existedDrug = this.cartProducts.find(d => d.id === drug.id);            existedDrug.quantity += 1;            this.$store.dispatch("setUserDataCart", this.cartProducts);            console.log(this.$store.state.cartProducts);        },        decreaseQuantity(drug) {            const existedDrug = this.cartProducts.find(d => d.id === drug.id);            existedDrug.quantity -= 1;            this.$store.dispatch("setUserDataCart", this.cartProducts);            console.log(this.$store.state.cartProducts);        },    },};</script>這是我的 vuex 商店:import Vue from "vue";import Vuex from "vuex";import VuexPersist from "vuex-persist";Vue.use(Vuex);const vuexPersist = new VuexPersist({  key: "my-app",  storage: window.localStorage});const store = new Vuex.Store({  state: {    cartProducts: []  },  mutations: {    SET_USER_CART(state, data) {      state.cartProducts = data;    }  },  actions: {    setUserDataCart({ commit }, data) {      commit("SET_USER_CART", data);    }  },  plugins: [vuexPersist.plugin]});export default store;我嘗試了多種方法,例如使用mapState或使用狀態(tài)作為一種getter但沒有運(yùn)氣。誰能確定我做錯了什么?
查看完整描述

2 回答

?
慕田峪7331174

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個贊

Vue.js 文檔中

計算屬性默認(rèn)是 getter-only

您嘗試在沒有set 方法的情況下更改計算屬性的方式??赡馨l(fā)生的情況是,僅更改對象屬性而不創(chuàng)建新屬性可能不會觸發(fā)更新 UI 的反應(yīng)。

我實(shí)際上建議采用另一種方法并將邏輯移動到存儲的變異方法,僅傳遞您需要增加/減少的產(chǎn)品的 id。并且還使用一種在更新后返回一個全新對象的map()方法(比如我用來更改cartProducts.

商店.js:

import Vue from "vue";

import Vuex from "vuex";

import VuexPersist from "vuex-persist";


Vue.use(Vuex);

const vuexPersist = new VuexPersist({

  key: "my-app",

  storage: window.localStorage

});


export default new Vuex.Store({

  state: {

    cartProducts: [

      {

        id: 1,

        name: "Drug 1",

        quantity: 1

      },

      {

        id: 2,

        name: "Drug 2",

        quantity: 1

      }

    ]

  },

  mutations: {

    INCREMENT(state, productId) {

      state.cartProducts = state.cartProducts.map(product => {

        if (product.id === productId) {

          product.quantity += 1;

        }

        return product;

      });

    },

    DECREMENT(state, productId) {

      state.cartProducts = state.cartProducts.map(product => {

        if (product.id === productId) {

          product.quantity -= 1;

        }

        return product;

      });

    }

  },

  actions: {

    incrementQuantity({ commit }, productId) {

      commit("INCREMENT", productId);

    },

    decrementQuantity({ commit }, productId) {

      commit("DECREMENT", productId);

    }

  },

  plugins: [vuexPersist.plugin]

});

購物車.js


<template>

  <table>

    <tbody>

      <tr v-for="product in cartProducts" :key="product.name">

        <td class="quantity">

          <button @click="decreaseQuantity(product)">decrease</button>

          <p>{{ product.quantity || 0 }}</p>

          <button @click="increaseQuantity(product)">increase</button>

        </td>

      </tr>

    </tbody>

  </table>

</template>


<script>

export default {

  computed: {

    cartProducts() {

      return this.$store.state.cartProducts;

    }

  },

  methods: {

    increaseQuantity(drug) {

      this.$store.dispatch("incrementQuantity", drug.id);

    },

    decreaseQuantity(drug) {

      this.$store.dispatch("decrementQuantity", drug.id);

    }

  }

};

</script>


查看完整回答
反對 回復(fù) 2022-05-26
?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個贊

請仔細(xì)閱讀 vuex 文檔。- https://vuex.vuejs.org/guide/ 改變狀態(tài)應(yīng)該發(fā)生在突變方法中。這是文檔中的一個簡單示例:


const store = new Vuex.Store({

  state: {

    count: 0

  },

  mutations: {

    increment (state) {

      state.count++

    }

  },

  actions: {

    increment (context) {

      context.commit('increment')

    }

  }

})


查看完整回答
反對 回復(fù) 2022-05-26
  • 2 回答
  • 0 關(guān)注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號