• Vuex 核心属性(下)


    Modules:可以定义新的模块

    官方上说,当我们的应用变的非常复杂时,store对象就有可能变得相当臃肿

    为了解决这个问题,Vuex允许我们将store分割成模块(Module),

    在这里,每个模块都拥有自己的state、mutations、actions、getters等

    写个例子吧:
    首先我们来声明一个module,起个名字就叫做moduleA吧

    const moduleA={ state:{}, mutations:{}, getters:{}, actions:{} } const store = new Vuex.Store({ state:{}, mutations:{}, actions:{}, getters:{}, modules:{ a:moduleA } })

    从上面的代码可以得知, const store = new Vuex.Store({})  是根(root)

    那么在const moduleA就是我们分离出去的模块了,下面我们在moduleA中的state写一条数据,看看它是如何被使用的

    const moduleA = {
      state:{
       name:"张三"
      }  
    }
    
    const store = new Vuex.Store({
      modules:{
        a:moduleA
       }
    })
    
    在组件页面引用时,如App.vue页面中引用时,
    
    <h1>{{$store.state.a.name}}</h1>

    可以看到,我们调用的还是根的state,但是我们定义的a:moduleA ,将我们在moduleA中的state以a的形式给添加到了根的state中去,

    所以我们要使用$store.state.a.name 来获取moduleA模块中state中的数据

    在moduleA这模块中的getter可以有三个参数:

    const moduleA = {
       getters:{
          fullName(state){
          //第一个参数:state==》指向当前模块中的state
          //返回内容是state中的name拼接上111
              return state.name + '111'
          },
       fullName2(state,getters){
    //第二个参数:getters====》可以引用该模块中的其他gettes方法
    //返回内容:先获取到fullName返回的内容再拼接上222
    return getters.fullName + '222'
    },
    fullName3(state,getters,rootState){
    //第三个参数rootState====>根上边的state
    //返回内容:先获取到fullName2返回的内容再拼接上 根上边的state中的count
    return getters.fullName2 + rootState.count
    }
    } }

    在moduleA这模块中的actions中的参数context(上下文)指向问题

    const moduleA = {
      actions:{
    aUpdName(context){ //context: 上下文的意思 setTimeout(()=>{ //参数'UpdName' 是mutations中的方法名,李四:是传递去的参数 context.commit('UpdName','李四') //这里的context.commit()方法只提交给当前模块中的mutations中去,也就是说模块里的context指向模块中的mutation },1000) } } }

     对象结构:可以将context解构为state、commit、rootState,如下面的例子

    const moduleA = {
      actions:{
    //state ===> 指向当前模块中的state; commit===> 提交给当前模块中的mutation ; rootState===> 根上边的state属性 aUpdName({state、commit、rootState}){ if((state.count + rootState.count) % 2 === 1){
          commit('updName') //updName 当前模块中的mutation
    } } } }

    至于在moduleA这个分离出来的模块中mutations的使用方法,跟分离前是一样的

  • 相关阅读:
    SSM框架使用遇到的问题
    《深入浅出wpf》第四章 x名称空间详解
    《深入浅出wpf》第三章
    《深入浅出wpf》第二章
    《深入浅出wpf》第一章
    《深入浅出wpf》序
    opencv2411配置
    k均值
    qt新建类报无法解析外部符号(link错误)
    fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  • 原文地址:https://www.cnblogs.com/a973692898/p/12849579.html
Copyright © 2020-2023  润新知