详解vuex commit保存数据技巧


Posted in Javascript onDecember 25, 2018

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使用严格模式也不会报错了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS 用6N±1法求素数 实例教程
Oct 20 Javascript
JS的千分位算法实现思路
Jul 31 Javascript
jquery选择器-根据多个属性选择示例代码
Oct 21 Javascript
Jquery 点击按钮自动高亮实现原理及代码
Apr 25 Javascript
使用AngularJS来实现HTML页面嵌套的方法
Jun 17 Javascript
JS留言功能的简单实现案例(推荐)
Jun 23 Javascript
JavaScript动态绑定详解
Sep 14 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
Sep 19 Javascript
在vue项目中安装使用Mint-UI的方法
Dec 27 Javascript
JS div匀速移动动画与变速移动动画代码实例
Mar 26 Javascript
jQuery实现的解析本地 XML 文档操作示例
Apr 30 jQuery
Vue实现简单计算器
Jan 20 Vue.js
bootstrap table实现合并单元格效果
Dec 24 #Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
Dec 24 #Javascript
Windows下支持自动更新的Electron应用脚手架的方法
Dec 24 #Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
Dec 24 #Javascript
Vue.js组件高级特性实例详解
Dec 24 #Javascript
JavaScript模板引擎原理与用法详解
Dec 24 #Javascript
jQuery实现的简单日历组件定义与用法示例
Dec 24 #jQuery
You might like
乐信RP2100的电路分析和打磨
2021/03/02 无线电
php 在文件指定行插入数据的代码
2010/05/08 PHP
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
Bootstrap Table的使用总结
2016/10/08 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
微信小程序实现录音时的麦克风动画效果实例
2019/05/18 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
2020/05/23 Javascript
JavaScript 监听组合按键思路及代码实现
2020/07/28 Javascript
[08:40]Navi Vs Newbee
2018/06/07 DOTA
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
python读取excel表格生成erlang数据
2017/08/26 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
python3.x实现base64加密和解密
2019/03/28 Python
编码实现字符串转整型的函数
2012/06/02 面试题
优秀团干部个人事迹
2014/05/29 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
婚宴邀请函
2015/01/30 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
学校标语口号大全
2015/12/26 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL