Vue.js那是真为前端开发者着想,如同当年的jQuery,多学一个知识点,就能少写一行代码,这句话完全可以用于Vue.js身上,下面说说在Vue.js2.6新版本中新增的东西Vue.observable( object ),这货能替代你以前的一些数据状态管理方案,当然,我并不是说vuex就没用了,就被完全替代了。
来个简单示例
1 2 3 4 5 6 7 8 9
| // 准备个文件store.js - /store/store.js
import Vue from 'vue'
export const store = Vue .observable ({ count: 0 }) //定义一个变量
export const mutations = { //定义一个方法,将来在组件中调用这个方法从而能改变上面的变量count值
setCount (count) {
store .count = count
}
} |
组件中去使用它
返回的对象可以直接用于渲染函数和计算属性内,并且会在发生改变时触发相应的更新。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <template >
<div >
<p >你点 +-,看我能不能根据状态去动态改变 </p >
<label for="bookNum">数量 </label >
<button @click ="setCount(count+1)">+</button >
<span >{{count}}</span >
<button @click ="setCount(count-1)">-</button >
</div >
</template >
<script >
import { store , mutations } from '../store/store' // Vue2.6新增API Observable
export default {
name : 'Add',
computed : {
count () {
return store .count //用于去渲染之前Observable中定义的变量count
}
},
methods : {
setCount : mutations .setCount
}
}
</script> |
小结
无意在网上看到的,觉得真心不错,有机会可以在一般项目中去尝试,vuex你还得单独配置装插件,做配置,这个东西就是内置的,我觉得尤雨溪大佬可能是借鉴了小程序类似这种全局状态管理,小程序不就也有一个全局状态globalData么。并且它相比较我们之前说到的$emit/$on这种兄弟组件数据传递方式类似,但明显更简洁。
官方强调,在 Vue 2.x 中,被传入的对象会直接被 Vue.observable 改变,所以如这里展示的,它和被返回的对象是同一个对象。在 Vue 3.x 中,则会返回一个可响应的代理,而对源对象直接进行修改仍然是不可响应的。因此,为了向前兼容,我们推荐始终操作使用 Vue.observable 返回的对象,而不是传入源对象。
针对上面官方说的这段话,我做了测试,2.6中发现在组件中是可以直接修改源对象,即可以直接去修改observable上的count,整个数据是响应的。可能我理解错了官方想表达的意思。
「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」
共 0 条评论关于"Vue.js替代vuex全局状态共享store的方案Observable"
最新评论