根据来自 Vuedose 博客的this awesome tip
Vue.js 2.6 引入了一些新特性,其中一个我非常喜欢的是新的全局可观察 API。
现在您可以在 Vue.js 组件范围之外创建响应式对象。而且,当你在组件中使用它们时,它会适当地触发渲染更新。
通过这种方式,您可以在不需要 Vuex 的情况下创建非常简单的商店,非常适合需要跨组件共享一些外部状态的简单场景。
对于这个技巧示例,您将构建一个简单的计数功能,将状态外部化到我们自己的商店。
首先创建store.js:
import Vue from "vue";
export const store = Vue.observable({
count: 0
});
如果您对突变和操作的想法感到满意,您可以通过创建简单的函数来更新数据来使用该模式:
import Vue from "vue";
export const store = Vue.observable({
count: 0
});
export const mutations = {
setCount(count) {
store.count = count;
}
};
现在您只需要在组件中使用它。要访问状态,就像在 Vuex 中一样,我们将使用计算属性和突变方法:
<template>
<div>
<p>Count: {{ count }}</p>
<button @click="setCount(count + 1);">+ 1</button>
<button @click="setCount(count - 1);">- 1</button>
</div>
</template>
<script>
import { store, mutations } from "./store";
export default {
computed: {
count() {
return store.count;
}
},
methods: {
setCount: mutations.setCount
}
};
</script>