Vue学习之Vuex

Posted snailbuster

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue学习之Vuex相关的知识,希望对你有一定的参考价值。

Vuex是一个状态管理的工具,采用集中式存储管理。

例如,组件A的状态组件B也想用,组件B的状态组件C也想用,组件C的状态。。。那么这些状态互相传递十分麻烦,多个组件可能需要共享一个状态,放在谁那里都不合适,所以找一个“管家”,这个对象负责管理这些状态。

技术图片

 

   这里state代表单页面中data的内容,view代表视图,actions代表一些触发行为。

  先安装下vuex

npm install vuex --save

  为了更加规范,我们在src目录下建立一个store文件夹。创建一个index.js:

import Vuex from ‘vuex‘
import Vue from ‘vue‘
//安装插件
Vue.use(Vuex)
//创建对象
const store = new Vuex.Store({

})
//导出
export default store

  在main中挂载下:

import store from "./store"
new Vue({
  render: h => h(App),
  store,
}).$mount(‘#app‘)

  store中放的内容都比较固定,常用是state、mutation、action。

  state中用于保存状态。

技术图片

 

   在google浏览器中添加一个vue.js devtools插件,

技术图片

 

   为了实现点击按钮对目标进行加减法,我们在刚才index.js的位置加入一个mutations

    mutations:{
        //方法
        increment(state){
            state.counter++
        },
        decrement(state){
            state.counter--
        },
    },

  在App.vue中设置两个按钮的函数:

  methods:{
    addition(){
      this.$store.commit(‘increment‘)
    },
    subtraction(){
      this.$store.commit(‘decrement‘)
    }
  }

  这样就可以了,通过$store.commit传递函数名称来使用。

  这里要提到我们如果记录的信息很多,也不要用多个store,我们要通过一个$store来保存,也是使用了单一状态树来管理应用层的全部状态,非常方便以后维护和管理。一个项目,一个store。

  getters部分,例如我们想要获得counters的平方。

    getters:{
        powerCounter(state){
            return state.counter*state.counter
        }
    },

  之后在App.vue中就可以使用了:

    <h2>getters相关信息</h2>
    <h2>{{$store.getters.powerCounter}}</h2>

  这样就可以了,非常方便。

  同理,如果想拿到年龄大于20岁的学生,可以继续在getters中写:

        more20stu(state){
            return state.students.filter(s=>s.age>20)
        }

  然后在控件中:

    <h2>{{$store.getters.more20stu}}</h2>

  这样就显示了:

技术图片

 

  getters中的函数可以增加一个getters的参数,也就是函数中可以调用getters的其他函数的结果。

  里面的函数通过闭包来获得,

        moreAgeStu(state){
            return function(age){
                return state.students.filter(s=>s.age>age)
            }
        }

  获取大于8岁的:

<h2>{{$store.getters.moreAgeStu(8)}}</h2>

  8又被传入到了age中然后返回了结果。mutation数据更新的时候也可以传递额外的参数。

   技术图片

 

以上是关于Vue学习之Vuex的主要内容,如果未能解决你的问题,请参考以下文章

vue学习之vuex

Vue学习之Vuex

4.vuex学习之gettersmapGetters

3.vuex学习之mutationsmapMutations

5.vuex学习之acrionsmapActions

vuejs学习之 项目打包之后的首屏加载优化