国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解vuex commit保存數據技巧

2024-05-06 15:43:51
字體:
來源:轉載
供稿:網友

vuex 單向數據流,推薦的commit 改變state數據,寫起來非常繁瑣,因為改數據可能要寫很多commit函數。

依據我的理解,單向數據流主要是為了避免數據混亂,便于調試。 說白了,就是一個數據改變了,是什么促使他改變的。

數據流向永遠都是一個方向,下游是沒有權利改變數據的,所以需要數據發放中心同一級的方法來改變數據。

單項數據流,對于react來說,的確是必要的,但對于vue來說,是那么有必要嗎?

vue采用數據依賴更新,必要的數據都采用Object.defineProperty處理。給數據賦值時,本來就會通知所有采用此數據的dom更新,不管是不是父級還是子級組建的dom。

使用vuex時 官方推薦使用commit才修改state數據。

優點

便于調試,當數據變化時,可以在vuetools工具中看到是哪個函數修改了state值。

缺點

采用commit修改數據,可能會寫很多mutations函數。 會上喪失掉一部分性能。因為新數據需要重新配置watcher。

優化

對于采用commit保存state數據的,可以采用如下方式:

傳一個字符串的path和需要修改的值,如果path='a.b.c'就換算成 state.a.b.c = 'needsave', 這就達到了一個commit 解決所有保存的問題。

// mutations中的函數save(state, { path, data }) { if (!path ) { throw new Error('need path') } const keyPath = path.split('.') let needSave = state for (let i = 0; i < keyPath.length - 1; i++) { needSave = needSave[keyPath[i]] if(!needSave) { throw new Error(`error path: ${keyPath[i]}`) } } needSave[keyPath[keyPath.length - 1]] = data},// 使用vuex.commit('save', {path:'a.b.c', data:val})// 結果state.a.b.c = '我是需要保存的數據'

在組件中

//如果要雙向綁定某個vuex中的值。<input v-model="c"> //script computed: { c: {  get(){   return vuex.state.a.b.c  },   set(val) {   vuex.commit('save', {path:'a.b.c', data:val})  } } }// 這樣就做到了在組件中雙向綁定,并且使用commit改變state中的值,vuex使用嚴格模式也不會報錯了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持錯新站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 容城县| 怀集县| 福贡县| 获嘉县| 九江市| 鄂温| 蓬安县| 奉新县| 察隅县| 河北区| 德化县| 淮阳县| 定陶县| 卓资县| 司法| 潮安县| 郓城县| 延川县| 永春县| 云南省| 介休市| 乌拉特中旗| 永新县| 攀枝花市| 龙游县| 新兴县| 漳州市| 四子王旗| 临洮县| 农安县| 合阳县| 舟曲县| 万源市| 讷河市| 九龙县| 邢台县| 建平县| 碌曲县| 高要市| 余干县| 游戏|