vuex

直接上示例,有不懂的可以查看vuex的官方文档:https://vuex.vuejs.org/zh/guide/state.html

一、state的用法

在src/vuex/index.js

import Vue from vue
import Vuex from vuex
Vue.use(Vuex)
// vuex是vue官方提供的用状态管理器,可以集中式的管理应用中所有的组件状态,更改数据的状态
// 更改vuex数据的方式;1.使用commit来触发mutations中的方法来更改数据的状态
//                    2.直接更改数据中的
const state = {   // state:store中存储的公共数据
    baseInfo:{  // state里面的数据可以直接通过接口获取
        name:zhangsan,
        age:23

    }
}
const mutations = {  // mutations:用commit来触发mutations中的方法,从而触发数据更新
    changeName(state,value){
        state.baseInfo.name = value
    },
    changeAge(state,value){
        console.log(state)
        state.baseInfo.age += value
    }
}
// const commit = {}
const getters = {   // 在每次数据更新前做的操作
    changeAge:function(state){
        return state.baseInfo.age + 1
    }
}
const store = new Vuex.Store({
    state,
    mutations,
    getters
})  
export default store  // 导出store状态,方便的main.js中引入,

在main.js中使用:

import Vue from vue
import App from ./App.vue
import store from ./vuex/index

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
  store   // 把 store 对象提供给 “store” 选项,把 store 的实例注入所有的子组件
}).$mount(#app)

在组件中使用:

<template>
  <div class="hello">
    {{this.$store.state.baseInfo.name}} <!-- 1.直接读取store中的state -->
    {{this.info.name}}     <!-- 2.读取计算属性 -->
    {{this.info.age}}
    <br>
    <button @click="chanAge">更改年龄</button>
  </div>
</template>

<script>
export default {
  name: HelloWorld,
  data(){
    return{
    }
  },
  computed:{
    info(){  // 将store中的baseInfo数据生成为计算属性,在view中可以直接使用{{this.info.name}}
    return this.$store.state.baseInfo
    }
  },
  methods:{
    chanAge(){   // 更改数据
this.$store.commit(changeAge,10)
    }
  }
}
</script>

 使用mapState生成计算属性:

<template>
  <div class="hello">
    {{this.info.name}}  <!--1.读取计算属性 -->
    <br>
    {{this.infoAlias.age}}  
    <br>    
    {{this.infoPlusLocalState}}
    <br>
<!-- 2.mapState传入字符串数组后可以这样使用 -->
    {{this.baseInfo.name + 年龄:+ this.baseInfo.age}}
<!-- 3.使用...将计算属性合并为一个对象 -->
    <br>
    {{this.Count}}
    <button @click="chanAge">更改年龄</button>
  </div>
</template>

<script>
import { mapState } from vuex  // 从vuex中引入mapState方法
export default {
  name: HelloWorld,
  props: {
    msg: String
  },
  data(){
    return{
      localCount:100
    }
  },

  // 1.当组件需要获取多个状态时,一个个将其声明为计算属性会很重复和多余,可以用mapState辅助函数来帮我们生成计算属性
  computed:mapState({
    info:state => state.baseInfo,
    infoAlias: baseInfo,
    infoPlusLocalState (state) {
      return state.baseInfo.name + this.localCount
    }
  }),

// 2.当计算属性和state中的数据同名可以直接传入一个数组
computed:mapState([baseInfo]),

  // 3.当组件中还有其他计算属性时,需要将state的计算属性和其他的计算属性合并为一个对象(mapState返回的是一个对象)
  // 此时就可以使用扩展运算符...
  computed:{
    Count(){
      return this.localCount + count
    },
    ...mapState([baseInfo])
    },
  methods:{
    chanAge(){
      this.$store.commit(changeAge,10)  // 更改数据
    }
  }
}
</script>

总结state:在view中我们使用state有3中方式:

1.直接读取store中的数据:this.$store.state.baseInfo.name

2.将state生成计算属性:this.info.name

3.使用mapState生成计算属性,减少了代码的冗余:

this.infoAlias.age,
this.infoPlusLocalState,
this.baseInfo.name +‘ 年龄:‘+ this.baseInfo.age

 

vuex

上一篇:CentOS7 安装 JDK


下一篇:修改SSO管理员密码