uniapp、vue,vuex中state改變,getters不動態改變的完美解決方案!


//想必各位朋友一定經歷着,改變state,getters卻不改變的痛苦,接下來博主給出解決方案;

//方案很簡單,第一步,改變state時,如改變state中的cart屬性時,引入vue,使用vue set添加未定義的flag,如下:

import Vue from 'vue'; //一定要引入vue,接下來要使用

//mutations
    AddCartHandle(state, data) { //新增購物車狀態
            state.cart.goods.map((item,index) => {
                if (item.id == goods_info.id) {
                    Vue.set(state,'cart',data.count); //使用Vue.set來設置值,getters才會響應,第一個為要設置的值(這里使用的是對象),第二個為第一個值的屬性:state.cart,第三個值為改變state.cart最新的數據。
                    Vue.set(item,'flag',!item.flag); //flag 在這里vue會自動為item添加一個flag屬性,每次改變值時,改變flag
                }
            });

    },

//getters (重點)
//如獲取state中的數據總數
    TotalCount(state) { //計算數據總數
        state.cart.total= 0;
        state.cart.list.forEach((item) => {
            if (  item.flag!=772) {  //這句話中的item.flag才是重點,加個if判斷,item中的flag沒有這個屬性,在上面Vue.set添加了這條屬性,AddCartHandle使用時,由於flag都改變了如mutations中(Vue.set(item,'flag',!item.flag); ),getter也會動態更新,flag!=772只是隨便寫的一個數值,772無實際意義
        Vue.set(state.cart,'count',state.cart.count+item.count;
            }
        })
        return state.cart.count;
    },


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM