实现之前首先引用一下官网的话:
如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用 Vuex。一个简单的store 模式 就足够您所需了。
在vue2.6.0 之前的一些状态缓存都依赖于store || storage
这对于一些较小型的应用来讲是比较臃肿的 那么我们的observable
就诞生了 其主要实现与轻量级,跨组件的数据响应式。你可以直接在不依赖于vuex的情况下处理你的响应数据。
具体的代码:
index.js :
import Vue from 'vue'
export const store = Vue.observable({
count: 0
})
export const mutations = {
_addCount() {
store.count++
},
_subCount(){
store.count--
}
}
parent.vue:
<template>
<div class="all">
<h1>parent: {{ count }}</h1>
<el-button @click="() => _addCount()">add count</el-button>
<ObservableCom />
</div>
</template>
<script>
import { store, mutations } from './index'
import ObservableCom from './components/ObservableCom'
export default {
components: { ObservableCom },
computed: {
count() { return store.count }
},
methods:{
...mutations
}
}
</script>
<style lang="scss" scoped>
.all {
width: 800px;
height: 400px;
border: 1px solid red;
margin: 50px auto;
}
</style>
children.vue:
<template>
<div class="observable-com">
<h3>children: {{ count }}</h3>
<el-button @click="() => _subCount()">sub count</el-button>
</div>
</template>
<script>
import { store, mutations } from '../index'
export default {
computed: {
count() { return store.count }
},
methods: {
...mutations
}
}
</script>
<style lang="scss" scoped>
.observable-com {
width: 400px;
height: 200px;
border: 1px solid red;
margin: 0 auto;
}
</style>