详解vuex commit保存数据技巧
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){ thrownewError('needpath') } constkeyPath=path.split('.') letneedSave=state for(leti=0;i在组件中
//如果要双向绑定某个vuex中的值。//script computed:{ c:{ get(){ returnvuex.state.a.b.c }, set(val){ vuex.commit('save',{path:'a.b.c',data:val}) } } } //这样就做到了在组件中双向绑定,并且使用commit改变state中的值,vuex使用严格模式也不会报错了。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。