Vuex的有哪些属性?用处是什么?
Vuex是一个专为Vue.js框架设计的状态管理库。它使用了集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方法发生变化。Vuex具有以下属性:
- State(状态): VueX存储的状态定义在一个单一的state树中,这使得它容易查找和调试.vue组件的所有状态都可以从这个状态树中获得。
- Getters(getters):他们是store的计算属性,我们可以把它想象成 vue 组件中的 computed(计算属性),Getter 接受 state 作为其第一个参数。
- Mutations(mutation):更改 Vuex 的 store 中的状态的唯一方法是提交 mutation,Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。
- Actions(actions):类似于 mutation,不同在于:Action 提交的是 mutation,而不是直接变更状态。注定使用Action的核心原因在于我们需要把 非同步操作 (如 Ajax 请求放)到这里面。
上述属性的用处是:
State: 存储和管理应用程序级别的状态,即应用程序中的所有数据。
Getters: 从存储状态中派生出状态,对状态进行更改,过滤或组合等作用。在有些地方我们需要对 store 中的状态进行 计算处理后再返回,比如根据 Store 中数据的计算满足一个特殊的需求。
Mutations: 更改 Vuex 的 store 中的状态,同步执行,令store的内容发生变化。
Actions: 可以包含任意异步操作,可以执行 mutations 从而改变 Vuex 的 store 中的状态。Action 类似于在 Vuex 中进行异步操作的方式,用于封装提交 mutation 的过程。例如,从服务器请求数据后将数据提交到 mutation 来更新状态
下面是一个示例来说明Vuex属性在一个简单的Vue应用中的应用:
Vue.use(Vuex);
const store = new Vuex.Store({
state: {
count: 0,
todos: [
{id: 1, text: 'Todo 1', done: true},
{id: 2, text: 'Todo 2', done: false},
{id: 3, text: 'Todo 3', done: true}
]
},
mutations: {
increment (state) {
state.count++;
},
decrement (state) {
state.count--;
},
toggleTodo (state, todo) {
todo.done = !todo.done;
}
},
actions: {
incrementAsync ({commit}) {
setTimeout(() => {
commit('increment');
}, 1000);
},
toggleTodoAsync ({commit}, todo) {
setTimeout(() => {
commit('toggleTodo', todo);
}, 1000);
}
},
getters: {
doneTodos: state => {
return state.todos.filter(todo => todo.done);
},
unfinishedTodos: state => {
return state.todos.filter(todo => !todo.done);
}
}
});
Vue.component('TodoItem', {
props: ['todo'],
template: `
<li>
{{ todo.text }}
<button v-on:click="toggleTodo">Toggle Todo</button>
</li>
`,
methods: {
toggleTodo: function () {
this.$store.dispatch('toggleTodoAsync', this.todo);
}
}
});
new Vue({
el: '#app',
data: {},
store,
computed: {
count: function () {
return this.$store.state.count;
},
doneTodos: function () {
return this.$store.getters.doneTodos;
},
unfinishedTodos: function () {
return this.$store.getters.unfinishedTodos;
}
},
methods: {
increment () {
this.$store.commit('increment');
},
decrement () {
this.$store.commit('decrement');
},
incrementAsync () {
this.$store.dispatch('incrementAsync');
}
}
});
这个示例演示了Vuex store中的属性。在store中的state属性存储了计数器值和待办事项的列表。mutations用于同步更改store中的状态。actions中的incrementAsync和toggleTodoAsync对应于异步操作,利用setTimeOut方法并调用mutations以改变store中的状态。getters可以派生出计算状态;在上例中,我们利用它返回待办事项的数组。最后,Vue组件通过理解它作为store.getters和store.dispatch方法在计数器上调用组件方法更新状态。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。