Vuex DforDream

vuex

state为全局状态

  • 组建内访问全局message状态

    • this.$store.state.message

    • import { mapState } from 'vuex'
      // mapState只需要提供转换的状态名字,就可以使用计算属性将全局状态转换为组件内部的计算属性
        computed: mapState(['message','userName']),
        computed: mapState({
          // 不能简写,后面的为字符串
         	// 组建内部使用的名字:全局状态中的名字
        	message: 'message',
        }),
      
    • 将全局的state合并到computed计算属性上

    • computed: {
          // 组件的自生的计算属性
          btnAction(){
           return 111
          },
          // 将全局的state合并到computed计算属性上
          // 辅助函数
          ...mapState({
          message: 'message',
        })
        },
      

mutations修改state的唯一方法

  • mutations只可以有同步操作,无法捕捉异步操作的状态变化

  • mutations: {
            // 配置方法
            modifyMsg (state,payload) {
                console.log('modifyMsg执行了。。。')
                console.log(payload)
                state.message = payload
            },
            modifyName (state, payload) {
                state.userName = payload.firstname + payload.lastname
            },
            testMutations (state) {
                state.value_1++
            }
        },
    
  • 组件内使用

  • // this.$store.commit触发mutations内的modifyMsg方法执行state状态的修改
    this.$store.commit('modifyMsg',this.value)
    this.$store.commit({
         type: 'modifyMsg',
         value: this.value
    })
    

actions

  • // actions 可以包含异步操作
    // actions 不能修改state
    // 只能通过mutations修改state
        actions: {
            // context 为store
            modifyValue (context,payload) {
                console.log('modifyValue执行了。。。')
                setInterval(() => {
                    // 触发mutations内的testMutations方法执行state状态的修改
                    context.commit('testMutations')
                },1000 )
            }
        }
    
  • // this.$store.dispatch触发actions内modifyValue方法
    this.$store.dispatch('modifyValue')
    

getters 全局的计算属性

modules vuex模块管理

  • 针对以上几个概念进行模块划分
  • 每一个vuex的module都有state、mutations、getters、actions的配置
  • 模块的命名空间 namespaced: true
  • 当模块有命名空间时,调用的时store的根模块,调用user模块内的modifyValue
  • this.$store.commit(‘user/modifyValue’,’test’)

axios数据请求

  • 看文档