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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Vue中的計(jì)算屬性不計(jì)算

Vue中的計(jì)算屬性不計(jì)算

冉冉說(shuō) 2022-12-29 16:24:10
我有一個(gè)用 Vue 構(gòu)建的電子商務(wù)應(yīng)用程序 (SPA),下面是商店的快照state: {    cart: [],    totalItems: {      count: 0    }},getters: {    totalItems(){      if(window.localStorage.totalItems){        return JSON.parse(window.localStorage.totalItems)      }      else{        let totalItems = { count: 0}        return totalItems      }    }},mutations: {    setCart(state, cart){      state.cart = cart      window.localStorage.cart = JSON.stringify(cart)    },    setTotalItems(state, totalItems){      state.totalItems = totalItems      window.localStorage.totalItems = JSON.stringify(totalItems)    }},actions: {    addToCart({ commit, getters }, productId){      let cart = getters.cart      let totalItems = getters.totalItems      if(cart.length == 0){        cart.push({id: productId, quantity: 1})        totalItems.count++      }      else if(cart.find(({ id }) => id == productId)){        let item = cart.find(({ id }) => id == productId)        item.quantity++        totalItems.count++      }      else{        cart.push({id: productId, quantity: 1})        totalItems.count++       }       commit('setCart', cart)       commit('setTotalItems', totalItems)    },    setTotalItems({ commit }, totalItems){      commit('setTotalItems', totalItems)    }}在我的 App.vue 文件中如下 -<template>  <v-app>    <v-app-bar      app      color="red"      dark    >      <v-btn text to="/">Vue Shop</v-btn>      <v-spacer></v-spacer>      <v-btn text to="/cart">        <v-badge v-if="totalItems.count" :content="totalItems.count"><v-icon>mdi-cart</v-icon></v-badge>      </v-btn>    </v-app-bar>    <v-main>      <router-view></router-view>    </v-main>  </v-app></template><script></script>當(dāng)我加載網(wǎng)站時(shí),我可以看到計(jì)算屬性正在計(jì)算。但是,當(dāng)我單擊下面顯示的 Home.vue 文件上的“添加到”按鈕時(shí),它應(yīng)該調(diào)用 addToCart 方法依次從商店調(diào)度 addToCart 操作我在哪里計(jì)算 totalItems 并使用 setTotalItems 突變?cè)O(shè)置值我面臨的問(wèn)題是,當(dāng)我單擊“添加到”按鈕時(shí),我可以看到 totalItems 的值在 localStorage 中更新,但它沒(méi)有反映在 v-app-bar 組件中。只有當(dāng)我導(dǎo)航到另一個(gè)頁(yè)面然后返回主頁(yè)時(shí),它才會(huì)這樣做。當(dāng)我通過(guò)將值存儲(chǔ)在狀態(tài)而不是 localStorage 中來(lái)實(shí)現(xiàn)時(shí),它會(huì)正確反映,而無(wú)需導(dǎo)航到其他頁(yè)面。有沒(méi)有辦法在仍然使用 localStorage 而不是商店的同時(shí)實(shí)現(xiàn)這一目標(biāo)
查看完整描述

1 回答

?
ibeautiful

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊

問(wèn)題本地存儲(chǔ)不是反應(yīng)性的,因此您的吸氣劑永遠(yuǎn)不會(huì)重新評(píng)估。


解決方案 您可以重寫(xiě)您的 getter,以便它僅在狀態(tài)尚未初始化時(shí)從本地存儲(chǔ)中檢索值。隨后的調(diào)用應(yīng)該直接訪問(wèn)該狀態(tài),因?yàn)槟诟哪脑鲎兤髦械臓顟B(tài),這將觸發(fā)對(duì)您的 getter 的重新評(píng)估,從而觸發(fā)您的計(jì)算屬性:


getters: {

    totalItems(state){

      if(state.totalItems.count < 0){

        return JSON.parse(window.localStorage.totalItems || '{count: 0}')

      }


      return state.totalItems;

    }

},

然后您可以初始化您的countwith -1,因此 getter 的第一次評(píng)估將查看本地存儲(chǔ)。


通過(guò)在你的 getter 中引用這個(gè)totalItems屬性,vue 知道只要這個(gè)屬性改變就重新評(píng)估這個(gè) getter。


這里的缺點(diǎn)是,在第一次更改計(jì)數(shù)之前,您的 getter 和您的狀態(tài)不會(huì)同步。


您可能還可以通過(guò)調(diào)用 localStorage 來(lái)初始化您的狀態(tài),然后從 getter 中刪除它。


state: {

   totalItems: {

      count: JSON.parse(window.localStorage.totalItems || '{count: 0}')

   }

},

getters: {

    totalItems(state){

      return state.totalItems;

    }

},

好處:你的狀態(tài)和吸氣劑是同步的,但這也會(huì)讓你的吸氣劑變得多余。


查看完整回答
反對(duì) 回復(fù) 2022-12-29
  • 1 回答
  • 0 關(guān)注
  • 171 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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