亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于vuex更新視圖引發(fā)的一些思考詳析

 更新時(shí)間:2022年06月15日 10:03:42   作者:朝著全棧加速前進(jìn)  
我們?cè)趘uex中操作數(shù)據(jù)時(shí)遇見(jiàn)視圖不更新的情況,下面這篇文章主要給大家介紹了關(guān)于vuex更新視圖引發(fā)的一些思考,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

vuex可以集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),當(dāng) Vue 組件從 store 中讀取狀態(tài)的時(shí)候,若 store 中的狀態(tài)發(fā)生變化,那么相應(yīng)的組件也會(huì)相應(yīng)地得到高效更新

但是,最近踩了vuex的坑:

場(chǎng)景

  • 第一次進(jìn)入頁(yè)面加載數(shù)據(jù),數(shù)據(jù)不顯示,點(diǎn)擊某個(gè)按鈕或者切換頁(yè)面后,數(shù)據(jù)會(huì)展示出來(lái)
  • 通過(guò)分析發(fā)現(xiàn),當(dāng)?shù)谝淮渭虞d頁(yè)面的時(shí)候,獲取數(shù)據(jù)的數(shù)據(jù)為{} (空對(duì)象),當(dāng)數(shù)據(jù)獲取完畢,執(zhí)行commit()
  • 而此時(shí)通過(guò)commit()已經(jīng)改變了state中的數(shù)據(jù),在頁(yè)面中通過(guò)computed也可以獲取更新后的數(shù)據(jù)。但是視圖沒(méi)有更新,獲取的數(shù)據(jù)沒(méi)有展示出來(lái)

解決

  • 嘗試在頁(yè)面中發(fā)送commit()來(lái)再次更新視圖,無(wú)效

  • 將Vue.set(state, 'myData', data),無(wú)效

  • ......

最終方案:

代碼中所聲明的對(duì)象里面的key是動(dòng)態(tài)的,所以初始只聲明了{(lán) }。

原來(lái),數(shù)據(jù)是數(shù)組的時(shí)候,不能通過(guò)索引直接進(jìn)行賦值,也不能修改數(shù)組的長(zhǎng)度。 而Vuex只會(huì)跟蹤在對(duì)象創(chuàng)建時(shí)就存在的屬性,新添加到對(duì)象上的新屬性不會(huì)觸發(fā)更新。

并且循環(huán)嵌套層級(jí)太深,視圖也可能不更新

最終,給數(shù)組對(duì)象賦值,這里轉(zhuǎn)化了一下寫(xiě)法,生效。具體如下:

const store = new Vuex.Store({
  state: {
    myData: []
  },
  mutations: {
    setData(state, data) {
      // state.myData = data  不更新視圖
      Vue.set(state, 'myData', JSON.parse(JSON.stringify(data)))
    }
  },
  actions: {
    myFn () {
      store.commit('setData')
    }
  }
})

export default store

如果添加了新的對(duì)象屬性,也可以使用Object.assign(),但必須深拷貝(否則加到對(duì)象上的新屬性不會(huì)觸發(fā)更新)

let someObject = Object.assign({}, someObject, {newField: value}) // 深拷貝
// Object.assign(this.someObject, { key: 1 }) // 淺拷貝

總結(jié)

  • 不能直接去改變 store 中的狀態(tài)。改變 store 中的狀態(tài)的需要提交 (commit) mutation
  • 在組件中調(diào)用 store 中的狀態(tài)在計(jì)算屬性中返回即可獲取,也可以直接$store.state來(lái)獲取
computed: {
    myData () {
      return store.state.myData
    }
},
mounted() {
    console.log(this.store.state.myData)
}
  • 為數(shù)組添加新屬性并不會(huì)觸發(fā)視圖更新,因?yàn)関ue沒(méi)有給新屬性增加get和set監(jiān)聽(tīng)

  • 賦值的數(shù)據(jù),如果循環(huán)嵌套層級(jí)太深,可能會(huì)導(dǎo)致視圖不更新

擴(kuò)展

這些方法操作數(shù)組,vue可以檢測(cè)到數(shù)據(jù)變化:

push()
pop()
shift()
unshift()
splice()
sort()
reverse()

而下面這些不會(huì)改變?cè)瓟?shù)組(返回了新數(shù)組),vue檢測(cè)不到:

filter()
concat()
slice()

到此這篇關(guān)于vuex更新視圖引發(fā)的一些思考的文章就介紹到這了,更多相關(guān)vuex更新視圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue.js簡(jiǎn)易安裝和快速入門(mén)(第二課)

    Vue.js簡(jiǎn)易安裝和快速入門(mén)(第二課)

    這篇文章主要為大家詳細(xì)介紹了Vue.js簡(jiǎn)易安裝和快速入門(mén)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 使用VitePress搭建及部署vue組件庫(kù)文檔的示例詳解

    使用VitePress搭建及部署vue組件庫(kù)文檔的示例詳解

    這篇文章主要介紹了使用VitePress搭建及部署vue組件庫(kù)文檔,本文以element-plus作為示例來(lái)搭建一個(gè)文檔,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Vue源碼解析之Template轉(zhuǎn)化為AST的實(shí)現(xiàn)方法

    Vue源碼解析之Template轉(zhuǎn)化為AST的實(shí)現(xiàn)方法

    這篇文章主要介紹了Vue源碼解析之Template轉(zhuǎn)化為AST的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 詳解vue 項(xiàng)目白屏解決方案

    詳解vue 項(xiàng)目白屏解決方案

    這篇文章主要介紹了詳解vue 項(xiàng)目白屏解決方案,詳細(xì)的介紹了白屏的解決方案,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-10-10
  • 一篇帶你搞懂Vue中的自定義指令

    一篇帶你搞懂Vue中的自定義指令

    自定義指令,是Vue提供的一種擴(kuò)展和定制的機(jī)制,使開(kāi)發(fā)者能夠在組件中直接操作DOM、處理事件、添加樣式等,并提供了與第三方庫(kù)集成的方式,定義指令使得Vue在處理交互和DOM操作時(shí)更加靈活和強(qiáng)大,本文將帶大家搞懂Vue中的自定義指令,需要的朋友可以參考下
    2023-07-07
  • Vue實(shí)現(xiàn)Excel預(yù)覽功能使用場(chǎng)景示例詳解

    Vue實(shí)現(xiàn)Excel預(yù)覽功能使用場(chǎng)景示例詳解

    這篇文章主要為大家介紹了Vue實(shí)現(xiàn)Excel預(yù)覽功能使用場(chǎng)景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • vue運(yùn)行環(huán)境搭建全過(guò)程

    vue運(yùn)行環(huán)境搭建全過(guò)程

    這篇文章主要介紹了vue運(yùn)行環(huán)境搭建全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Vue實(shí)現(xiàn)單行刪除與批量刪除

    Vue實(shí)現(xiàn)單行刪除與批量刪除

    這篇文章主要介紹了Vue實(shí)現(xiàn)單行刪除與批量刪除,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue項(xiàng)目實(shí)戰(zhàn)之圓柱狀水波效果實(shí)現(xiàn)

    vue項(xiàng)目實(shí)戰(zhàn)之圓柱狀水波效果實(shí)現(xiàn)

    最近工作中實(shí)現(xiàn)的一個(gè)效果不錯(cuò),分享給大家,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目實(shí)戰(zhàn)之圓柱狀水波效果實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Vue 滾動(dòng)行為的具體使用方法

    Vue 滾動(dòng)行為的具體使用方法

    本篇文章主要介紹了Vue 滾動(dòng)行為的具體使用方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09

最新評(píng)論