Vuex是Vue.js的状况管理工作库,它透过虚拟化的状况管理工作使模块间的资源共享更为难。
Vuex包涵四个核心理念特性:state、getters、mutations、actions和modules。
1:state:表述了插件的状况,是他们要管理工作的统计数据。
const store = new Vuex.Store({ state: { count: 0 } })2:getters:排序特性。getters转交state做为第三个模块。
const store = new Vuex.Store({ state: { count: 0 }, getters: { doubleCount(state) { return state.count * 2 } } })3:mutations:用作修正state中的统计数据,是惟一能修正state的地方性。mutations转交state做为第三个模块,转交payload做为第三个模块。
const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++ }, add(state, payload) { state.count += payload } } })4:actions:用作异步操作和提交mutations,在actions中能进行任何异步操作,最后再提交到mutations中同步修正state。actions转交context做为第三个模块,其中包涵了state、getters和commit等特性。
const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++ } }, actions: { incrementAsync(context) { setTimeout(() => { context.commit(increment) }, 1000) } } })5:modules:用作将store分割成模块,每个模块中有自己的state、getters、mutations和actions。
const store = new Vuex.Store({ modules: { cart: { state: { items: [] }, mutations: { addItem(state, item) { state.items.push(item) } }, actions: { addAsyncItem(context, item) { setTimeout(() => { context.commit(addItem, item) }, 1000) } } } } })采用方式:
1:安装Vuex:npm install vuex –save
2:在main.js中,导入Vuex,并采用Vue.use()方式注册Vuex。
import Vue from vue import Vuex from vuex import App from ./App.vue Vue.use(Vuex) const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++ } } }) new Vue({ store, render: h => h(App) }).$mount(#app)3:在模块中采用vuex中的统计数据和方式。
<template> <div> <p>Count: {{ count }}</p> <button @click=“increment”>Increment</button> </div> </template> <script> export default { computed: { count() {return this.$store.state.count } }, methods: { increment() { this.$store.commit(increment) } } } </script>Vuex是Vue.js官方提供的状况管理工作库,用作管理工作Vue.js插件中的统计数据。
Vuex的四个特性分别是:state、mutations、actions、getters和modules。
1:state:用作存储Vuex插件的所有状况。它是一个JavaScript对象,包涵多个键值对。
采用方式实例:
const store = new Vuex.Store({ state: { count: 0 } })2:mutations:用作修正state中的统计数据。由于Vuex的状况是响应式的,所以所有的mutation方式都是同步的。
采用方式实例:
const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ }, decrement (state) { state.count– } } })3:actions:用作处理异步操作或批量操作mutation。action方式转交一个context对象,包涵state、commit和dispatch等方式。
采用方式实例:
const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } }, actions: { incrementAsync (context) { setTimeout(() => { context.commit(increment) }, 1000) } } })4:getters:用作对store中的统计数据进行排序和过滤。它类似于Vue.js中的排序特性。
采用方式实例:
const store = new Vuex.Store({ state: { todos: [ {id: 1, text: Learn Vue, done: true}, {id: 2, text: Build an app, done: false}, {id: 3, text: Deploy to production, done: false} ] }, getters: { doneTodos: state => { return state.todos.filter(todo => todo.done) } } })5:modules:将store分割成模块,每个模块都拥有自己的state、mutation、action、getters和子模块,以便提高插件的可维护性。
采用方式实例:
const store = new Vuex.Store({ modules: { cart: { state: { items: [] }, mutations: { pushProductToCart (state, payload) { state.items.push({ id: payload.id, quantity: 1 }) } }, actions: { addProductToCart ({ state, commit }, product) { const cartItem = state.items.find(item => item.id === product.id) if (!cartItem) { commit(pushProductToCart, product) } } }, getters: { cartItems: state => { return state.items } } } } })这个代码创建了一个包涵cart模块的Vuex store对象,其中cart模块包涵state、mutations、actions和getters四个特性,用作管理工作购物车统计数据。在addProductToCart action中,采用state.items和commit方式来修正cart模块中的统计数据。在cartItems getter中,采用state.items来排序购物车中的商品数量和总价。
Vuex是Vue.js的状况管理工作库,它提供了一种集中式存储管理工作插件中所有模块的状况,并将其分离到一个可预测的状况容器中。Vuex包括四个核心理念特性:
1:State:存放插件的状况(统计数据),所有模块共享。它是Vue实例的data特性的替代品,但是透过它存储和管理工作的状况,能在整个插件中实现全局共享,即不同的模块能透过表述的getter和setter访问同一状况统计数据。
2:Getter:特性。
3:Mutation:用作修正State中的状况,只能同步执行。Mutation必须是同步函数,因为它们不能处理异步行为,异步行为应该放在Action中处理。
4:Action:能包涵任意异步操
5:Module:用作将State、Getter、Mutation、Action模块化,便于模块化和模块化开发。
下面是一个简单的Vuex采用方式的实例:
// 引入Vue和Vuex import Vue from vue import Vuex from vuex Vue.use(Vuex) // 创建一个Store const store = new Vuex.Store({ // 表述State state: { count: 0 }, // 表述Mutationmutations: { increment: state => state.count++, decrement: state => state.count– },// 表述Gettergetters: { evenOrOdd: state => state.count %2 === 0 ? even : odd }, // 表述Actionactions: { incrementIfOdd ({ commit, state }) {if ((state.count + 1) % 2 === 0) { commit(increment) } } } }) new Vue({ el:#app, store, template: ` <div> <p>Count: {{ count }}</p> <p>Even or Odd? {{ evenOrOdd }}</p> <button@click=“increment”>Increment</button> <button @click=“decrement”>Decrement</button> <button@click=“incrementIfOdd”>IncrementIfOdd</button> </div> `, computed: { count () {return this.$store.state.count }, evenOrOdd () { return this.$store.getters.evenOrOdd } }, methods: { increment () {this.$store.commit(increment) }, decrement () {this.$store.commit(decrement) }, incrementIfOdd () { this.$store.dispatch(incrementIfOdd) } } })这个代码创建了一个Vuex Store,并表述了State、Mutation、Getter、Action。然后将Store实例与Vue实例关联。在Vue模块中,采用排序特性(computed)和方式(methods)来访问State、Getter和Action。在方式中,采用commit来提交Mutation,采用dispatch来分发Action。