详解vuex commit保存数据技巧
2019-03-28 10:57
405 查看
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使用严格模式也不会报错了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- vuex commit保存数据技巧
- 详解Word与Access数据交流技巧
- 【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!
- vue的style绑定background-image的方式和其他变量数据的区别详解
- 【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!
- 非连接式数据保存时的一点技巧
- vue在使用ECharts时的异步更新和数据加载详解
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式
- 详解Word与Access数据交流技巧
- 在Vue中使用sortable.js实现拖动效果并保存拖动数据
- 详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- 示例vuex commit保存数据技巧
- vue中的双向数据绑定详解
- 详解Vue源码之数据的代理访问
- 详解刷新页面vuex数据不消失和不跳转页面的解决
- vue数据传递--我有特殊的实现技巧
- 详解vue 配合vue-resource调用接口获取数据
- SharedPreferences保存数据详解<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- oracle form 数据操作机制 保存按钮 KEY-COMMIT