Vue.js

Vuex

2022-09-09  本文已影响0人  东方晓

2022-09-09 周五

Vuex官方文档

什么是Vuex

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。

把各个组件公用的数据放到一个仓库里面进行统一的管理,这样既使得非父子组件间的数据共享变得简单明了,也让程序变得更加可维护(将数据抽离了出来),而且只要仓库里面的数据发生了变化,在其他组件里面数据被引用的地方也会自动更新。


Vue中的单向数据流

View(视图)、Actions(响应状态变化,可以简单理解为methods等等)、State(数据源,简单理解就是数据)。从图中的箭头我们可以看出,我们通过Actions改变State(数据),然后View(视图)更新,这一个过程是单向的,不会发生View(视图)改变了,然后State(数据)更新的情况,这使得我们的数据可控。

什么情况下使用Vuex

Vuex 可以帮助我们管理共享状态,并附带了更多的概念和框架。这需要对短期和长期效益进行权衡。 如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用 Vuex。一个简单的 store 模式就足够您所需了。但是,如果您需要构建一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。

项目结构
this.$store

我们最开始把vuex挂载到了根组件上去,所以我们在任何地方都可以调用store,和router一个道理,就像是调用store这个大仓库里面的属性一样。

  1. store:定义全局变量
    访问方法:store.state.xxx
  2. mutations:
 mutations: {
    increment (state) {
      // 变更状态
      state.count++
    }
  }
  store.commit('increment')
  1. commit:触发方法
  2. mapState:辅助函数,批量引入全局变量
  3. getters:store的计算属性,针对全局变量的计算方法
  1. action
this.$store.dispatch('countAdd',10)
...mapActions(['xx','yy'])
 actions: {
    //接收组件传过来的参数num,Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象
        countAddFn(context,num){
            context.commit('countAdd',num)
        }
    }
 mutations: {
    //传入一个state对象,接收传过来的参数num
        countAdd(state,num){
            state.count+=num
        }
    }
  1. Module
上一篇 下一篇

猜你喜欢

热点阅读