最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

但是,最近踩了vuex的坑:

場景

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

解決

  • 嘗試在頁面中發(fā)送commit()來再次更新視圖,無效

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

  • ......

最終方案:

代碼中所聲明的對象里面的key是動態(tài)的,所以初始只聲明了{ }。

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

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

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

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

如果添加了新的對象屬性,也可以使用Object.assign(),但必須深拷貝(否則加到對象上的新屬性不會觸發(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)在計算屬性中返回即可獲取,也可以直接$store.state來獲取
computed: {
    myData () {
      return store.state.myData
    }
},
mounted() {
    console.log(this.store.state.myData)
}
  • 為數(shù)組添加新屬性并不會觸發(fā)視圖更新,因為vue沒有給新屬性增加get和set監(jiān)聽

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

擴展

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

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

而下面這些不會改變原數(shù)組(返回了新數(shù)組),vue檢測不到:

filter()
concat()
slice()

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

相關(guān)文章

  • Vue3組合式API中使用forwardRef()函數(shù)

    Vue3組合式API中使用forwardRef()函數(shù)

    本文主要介紹了Vue3組合式API中使用forwardRef()函數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Vue中nextTick的原理分析

    Vue中nextTick的原理分析

    本文詳細介紹了Vue中nextTick的原理和使用方法,Vue采用異步渲染機制,通過nextTick可以確保在DOM更新后執(zhí)行回調(diào),nextTick依賴微任務(wù)和宏任務(wù),優(yōu)先使用Promise,降級到MutationObserver/setTimeout,Vue3進一步優(yōu)化了nextTick,減少了復雜度并提升了性能
    2025-02-02
  • vue中mapbox地圖顯示一半的問題及解決方法

    vue中mapbox地圖顯示一半的問題及解決方法

    在vue中創(chuàng)建mapbox地圖,地圖只顯示一般,查看瀏覽器開發(fā)者工具,發(fā)現(xiàn)將canvas.mapboxgl-canvas 的position:absolute去掉就解決了,今天小編通過本文給大家分享詳細過程,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • vue表單驗證你真的會了嗎?vue表單驗證(form)validate

    vue表單驗證你真的會了嗎?vue表單驗證(form)validate

    這篇文章主要介紹了vue表單驗證你真的會了嗎?vue表單驗證(form)validate,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Vue3中使用監(jiān)聽器的具體實踐

    Vue3中使用監(jiān)聽器的具體實踐

    監(jiān)聽器是Vue3中非常好用的一個特性,用于監(jiān)聽某個響應式變量的變化,本文就來介紹一下Vue3中使用監(jiān)聽器的具體實踐,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • vue 自定義 select內(nèi)置組件

    vue 自定義 select內(nèi)置組件

    這篇文章主要介紹了vue 自定義內(nèi)置組件 select的相關(guān)知識,整合了第三方j(luò)query 插件select2,具體實例代碼大家參考下本文
    2018-04-04
  • Proxy中代理數(shù)據(jù)攔截的方法詳解

    Proxy中代理數(shù)據(jù)攔截的方法詳解

    這篇文章主要為大家詳細介紹了Proxy中代理數(shù)據(jù)攔截的方法,文中的示例代碼講解詳細,對我們學習或工作具有一定的借鑒價值,需要的可以參考一下
    2022-12-12
  • 淺析Vue如何巧用computed計算屬性

    淺析Vue如何巧用computed計算屬性

    在日常使用Vue開發(fā)項目的時候,計算屬性computed是一個非常常用的特性,本文就來分享一些使用Vue的computed計算屬性時的一些小技巧,希望能夠幫助到大家
    2023-06-06
  • vue3子組件上綁定(v-model="xx")父組件傳過來的值后報錯解決

    vue3子組件上綁定(v-model="xx")父組件傳過來的值后報錯解決

    這篇文章主要給大家介紹了關(guān)于vue3子組件上綁定(v-model="xx")父組件傳過來的值后報錯解決辦法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用vue3具有一定的參考學習價值,需要的朋友可以參考下
    2023-07-07
  • VueJS頁面渲染之后如何調(diào)用函數(shù)

    VueJS頁面渲染之后如何調(diào)用函數(shù)

    這篇文章主要介紹了VueJS頁面渲染之后如何調(diào)用函數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論

富平县| 广东省| 龙海市| 陆良县| 青海省| 平乡县| 三门峡市| 嘉善县| 化德县| 鞍山市| 台江县| 永川市| 九龙县| 临西县| 伽师县| 筠连县| 安阳市| 宝丰县| 历史| 甘孜| 丹棱县| 德庆县| 五莲县| 新沂市| 秦皇岛市| 丹阳市| 伊吾县| 西畴县| 正蓝旗| 宜都市| 舟曲县| 牡丹江市| 葵青区| 永吉县| 阜康市| 兰溪市| 罗定市| 佳木斯市| 忻城县| 泾源县| 鱼台县|