Vuex 笔记

1、Vuex介绍
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

2、常用场景
一般用于大中型单页应用项目中,帮助我们管理组件内外共享状态。

3、Vuex与localStorage的区别
vuex是存储在内存中,页面刷新即失效,相当于全局变量的作用,但是和单纯的全局变量又有区别,Vuex 的状态存储是响应式的,并且不能直接改变 store 中的状态,只能通过commit mutation;localStorage存储在浏览器缓存中,只有当缓存失效或者手动清除浏览器缓存才会失效
注:可以使用localStorage存储信息来解决vuex刷新后数据被清除问题。

4、Vuex相关概念

a、核心是store,包含着应用中的大部分state
b、Getter: 有时候需要从store 中的 state 中派生出一些状态,可以认为store的计算属性,
使用方式常见如下:

getters: {
    doneTodos: state => {
      return state.todos.filter(todo => todo.done)
    }
  }

Getter 会暴露为 store.getters 对象
c、Mutation:更改state的方式是通过提交Mutation,它是同步的
d、Action:提交Mutation,不是直接变更状态,可以进行任意异步操作.通过 store.dispatch 方法触发,可以处理被触发的 action 的处理函数返回的 Promise,并且 store.dispatch 仍旧返回 Promise。

//分发方式
// 以载荷形式分发
store.dispatch('incrementAsync', {
  amount: 10
})

// 以对象形式分发
store.dispatch({
  type: 'incrementAsync',
  amount: 10
})
actions: {
  actionA ({ commit },{ amount }) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        commit('someMutation')
        amount++;
        resolve(amount)
      }, 1000)
    })
  }
}
store.dispatch('actionA',{amount:10}).then((amount) => {
    console.log(amount)
  // ...
})

5、代码结构

//modules/app.js
(每个modules都有自己的state、mutations、mutations)
const app = {
    state: {
        sidebar: {}
    },
    mutations: {
        TOGGLE_SIDEBAR: state => {
            
        }
    },
    actions: {
        ToggleSideBar: ({commit}) => {
            commit('TOGGLE_SIDEBAR')
        }
    }
};

export default app;

//modules/index.js
Vue.use(Vuex);
const store = new Vuex.Store({//创建实例
  modules: {
    app
  },
  getters 
});
export default store

//main.js
import store from './store'
new Vue({
    store,//注入,组件共享
    el: '#app',
    render: h => h(App)
})
posted @ 2018-03-06 11:32  娜嚒妮  阅读(68)  评论(0编辑  收藏  举报