vuex项目框架

1、脚手架搭建项目完成以后,安装vuex

cnpm install vuex --save

 

 
3、项目搭建
  知识点:
  •   state相当于数据源。
  •   getter。从 store 中的 state 中派生出一些状态数据。即:从state中获取数值,然后进行操作(例如数据过滤),得到所需的格式数据,并不改变state。可以认为是 store 的计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。
  •   Mutation。更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。使用store.commit()提交。Mutation 必须是同步函数
  •   Action。Action 提交的是 mutation,而不是直接变更状态;Action 可以包含任意异步操作。Action 通过 store.dispatch 方法触发store.dispatch()
  由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块。
  Vuex 并不限制你的代码结构。但是,它规定了一些需要遵守的规则:   
  1. 应用层级的状态应该集中到单个 store 对象中。

  2. 提交 mutation 是更改状态的唯一方法,并且这个过程是同步的。

  3. 异步逻辑都应该封装到 action 里面。

 只要你遵守以上规则,如何组织代码随你便。如果你的 store 文件太大,只需将 action、mutation 和 getter 分割到单独的文件。
 
2、搭建vuex项目功能模式和结构
   vuex项目框架_第1张图片

 

   (1)、在src下新建文件夹store

   (2)、在store文件夹下新建index.js文件和modules文件。其中modules文件夹下存在的是各模块下的数据

   (3)、在modules下新建用户模块相关的数据。

  具体文件内容如下示:

  (1)src/store/index.js文件代码如下实例:  

 1 import Vue from 'vue'
 2 import Vuex from 'vuex'
 3 Vue.use(Vuex)
 4 import user from './modules/user'
 5 const store = new Vuex.Store({
 6     modules: {
 7        user
 8     }
 9 })
10 export default store

  (2)src/store/modules/user.js文件代码如下实例:

    getters的值,是通过对state进行数据处理返回,并不会修改state的值。

    commit mutations是唯一可以直接修改state的途径。

    actions里面的方法可以异步处理,然后把结果commit到mutations中

 1 const state = {
 2     USER_TYPE_LIST: [
 3         {value: 1, label: '管理员'},
 4         {value: 2, label: '住户'},
 5         {value: 3, label: '业主'}
 6     ]
 7 }
 8 const getters = {
 9     USER_TYPE_LIST_USER_GETTER(state){
10         const filterAry = state.USER_TYPE_LIST.filter(item =>{
11             return item.value>2
12         })
13         return filterAry
14     }
15 }
16 const mutations = {
17     addUserType(state,obj){
18         state.USER_TYPE_LIST = obj
19     }
20 }
21 const actions = {
22     editUserType({dispatch,commit,state},obj){
23         // 此处可以调用后台接口,作异步数据处理。由于是demo原因,省略调用接口的功能
24         // dispatch('xxx)   // 可以调用actions里面的其他方法
25         // state可以获取state的值
26         commit('addUserType',obj)
27     }
28 }
29 export default {
30     namespaced: true,
31     getters,
32     state,
33     mutations,
34     actions
35 }

 

3、main.js页面引入

 1 import Vue from 'vue'
 2 import App from './App.vue'
 3 import store from './store'
 4 import router from './router'
 5 Vue.config.productionTip = false
 6 
 7 
 8 import ElementUI from 'element-ui';
 9 import 'element-ui/lib/theme-chalk/index.css';
10 Vue.use(ElementUI);
11 
12 new Vue({
13   render: h => h(App),
14   store,
15   router
16 }).$mount('#app')

 

4、页面使用举例:

  值获取,可以引入使用辅助函数。或者可以直接调用this.$store方法。  

 1 
19 
61 

 

 

 码云地址参考:https://gitee.com/LuoXMM/vuexDemo

 

 

 

 

 

你可能感兴趣的:(vuex项目框架)