相思资源网 Design By www.200059.com
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使用严格模式也不会报错了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相思资源网 Design By www.200059.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
相思资源网 Design By www.200059.com
暂无详解vuex commit保存数据技巧的评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。