唯品秀前端博客

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,整个数据是响应的。可能我理解错了官方想表达的意思。

本站所有文章、图片、资源等如无特殊说明或标注,均为来自互联网或者站长原创,版权归原作者所有;仅作为个人学习、研究以及欣赏!如若本站内容侵犯了原著者的合法权益,可联系我们进行处理,邮箱:343049466@qq.com
赞(7) 打赏

上一篇:

下一篇:

相关推荐

0 条评论关于"Vue.js替代vuex全局状态共享store的方案Observable-组件通信"

表情

最新评论

    暂无留言哦~~
谢谢你请我吃鸡腿*^_^*

支付宝扫一扫打赏

微信扫一扫打赏