zoukankan      html  css  js  c++  java
  • 关于Vuex的初步使用

    store.js文件中定义各个访问状态和方法

    import Vue from "vue"
    import Vuex from "vuex"
    
    Vue.use(Vuex)
    
    const state = {         //定义访问状态对象
        count : 44
    }
    
    const mutations = {      //定义触发状态对象方法,传入state整个对象
        jia(state) {
            state.count ++
        }
    }
    
    const getters = {     //类似计算属性,对state的数据进行复杂的逻辑计算,使用return返回结果
        count : function (state){
            return state.count += 100
        }
    }
    
    const actions =  {      //异步执行方法,传入参数context,等同于整个store
        jianplus (context) {
          context.commit("jia",10)    //调用mutations中的方法并传参
        }
    
      testplus ({commit}) {   //简写方式,使用{}  单独传入mutations对象
            commit(‘jian’)      //调用mutations中的方法
        }

    three({commit,dispatch}){ //使用dispatch调用actions的方法
      return dispatch('testplus').then(()=>{
        commit('jianplus')
      })
    } }, Const moduleA
    = { //定义一个模块,引入各个状态对象或方法 state, mutations, getters, actions } export default new Vuex.Store ({ //没有使用模块时的写法 state, mutations, gettrts, actions }) // export default new Vuex.Store ({ //使用模块时的写法 // modules : { // a : moduleA //引入定义模块 // } // })

    一、state   定义访问状态  定义的是常量

    如何在HTML中访问:当未引入 mapState时,可通过$store去访问    引入时按照正常的变量使用

    <h1>{{$store.state.count}}</h1>   //通过$store去访问

    在vue文件中的定义:在计算属性computed位置进行引用,使用mapState

    import {mapState } from ‘Vuex’       //引入 mapState
    export default {
      name: 'test',
    
      data: () => ({
        test: '',
      }),
    
      methods: {
    
      },
      
    
      // computed: mapState([   //直接使用state中定义的count     注意这里是一个数组
      //   "count"
      // ])
    
      computed: mapState({    //对state中定义的count做运算后再使用   注意这里是一个对象
     count : state => state.count+1 }) 
    
    }

    二、mutations   定义触发访问状态的方法    触发方法为同步执行

    如何使用:跟事件触发方法一样跟在各种事件之后,通过commit方法触发   

    <button type="button" @click="$tore.commit(“jia”)"></button>

    如何传参:括号内第一个值为方法名,后面为传入参数,传入的参数可以为一个对象

    <button type="button" @click="$tore.commit(“jia”,10)"></button>

    在vue文件中的定义:在定义方法methods位置进行引用,使用mapMutations

    import {mapState,mapMutations} from ‘Vuex’       //引入 mapMutations
    export default {
      name: 'test',
    
      data: () => ({
        test: '',
      }),
    
      methods:mapMutations([     //定义mutations中的各个方法
        ‘jia’,
        ‘jian’
      ])
        
    
      computed: mapState({    //对state中定义的count做运算后再使用
        count : state =>  state.count+1   
      })
    }

    三、getters      类似于计算属性  一般在对访问状态内的数据做复杂运算时使用

    在vue文件中的定义:在计算属性computed位置进行引用,使用mapGetters

     computed : {         //vue文件中只能有一个computed,同时定义state时,需要改变写法
        ...mapState ({    //注意使用...
          "count” 
        }),
        
        count () {        //调用getters中的count方法,将值return出去
          return this.$store.getters.count
        }

    简化写法:引入mapGetters

    import {mapState,mapMutations,mapGetters} from ‘Vuex’       //引入 mapGetters
    export default {
      name: 'test',
    
      data: () => ({
        test: '',
      }),
    
      methods:mapMutations([     //定义mutations中的各个方法
        ‘jia’,
        ‘jian’
      ])
        
    
     computed : {         //vue文件中只能有一个computed,同时定义state时,需要改变写法
        ...mapState ({    //注意使用...
          "count” 
        }),
        
        ...mapGetters([      //调用getters中的count
              "count”
          ])
      }
    }

    四、actions   异步触发方法

    在vue文件中的定义:在定义方法methods位置进行引用,使用mapActions   也可以通过dispatch方法触发  

    import {mapState,mapMutations,mapGetters,mapActions} from ‘Vuex’       //引入 mapActions
    export default {
      name: 'test',
    
      data: () => ({
        test: '',
      }),
    
    methods:{
      ...mapMutations([
            ‘jia’,
            ‘jian’
        ]),
        
      ...mapActions([     //引入actions中定义的jiaplus方法
            ‘jiaplus’
        ])
    }
    
        
    
     computed : {         
        ...mapState ({    
          "count” 
        }),
        
        ...mapGetters([      
              "count”
          ])
      }
    }
    <button type="button" @click="$tore.dispatch(“jiaplus”)"></button>

    dispatch代表的是actions的整个对象,我们可以通过在其中一个actions中传入dispatch触发其他的actions方法,会有一个返回值

    actions: {
      actionA ({ commit }) {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            commit('someMutation')
            resolve()
          }, 1000)
        })
      },
    
      actionB ({ dispatch, commit }) {
        // 组合,传入dispatch  调用actions的其他方法
        return dispatch('actionA').then(() => {
          commit('someOtherMutation')
        })
      }
    }
     

    五、modules  模块组   当有多个store对象时使用

  • 相关阅读:
    服务器中一个进程kill不掉,如何处理?
    JVM基本概念
    Redis安装以及常见问题
    JVM---类加载器
    lambda表达式
    maven学习(3)pom.xml文件说明以及常用指令
    maven学习(2)仓库和配置
    maven学习(1)下载和安装和初步使用(手动构建项目和自动构建项目)
    JMicro微服务之超时&重试
    JMicro微服务Hello World
  • 原文地址:https://www.cnblogs.com/zhengweijie/p/7132234.html
Copyright © 2011-2022 走看看