Vuex中state(状态)、mutations(更改状态) actions(异步操作)、getters(计算属性)、modules(模块)使用详解!

vuex是采用集中式管理组件依赖的共享数据的一个工具,可以解决不同组件数据共享的问题。

state 存放数据的

mutaitions 中不能去做异步的操作的。做数据修改的,目的是形成数据快照

数据快照是一次mutation的执行,立刻得到一种视图状态,因为是立刻,所以必须是同步

actions 中放异步的操作比如说axios请求。

getters(计算属性) 存放一些数据操作的更改

modules 模块化

组件调用action 执行一部操作将数据提交给mutaitions进行修改。

三种方法获取存储的数据

1.直接在需要调用的地方使用 $store.stare.属性名

2.在计算属性中使用

​
<template>
  <div>
   
   计算属性 count值为{{count}}
    <button @click="subs">-1</button>
  </div>
</template>

<script>

export default {

  },
  computed: {  
    count(){
        return this.$store.state.count
}
  }
}
</script>

<style></style>

​

3.在计算属性使用辅助函数-mapState 需要导入 这个辅助函数

mapSate是辅助函数,帮助我们把store中的数据映射到组件的计算属性中,它属于一种方便方法

<template>
  <div>
    当前最新的cout值为{{ $store.state.count }}
    辅助函数获取的count值为{{count}}
    <button @click="subs">-1</button>
  </div>
</template>

<script>
import { mapState, mapMutations } from 'vuex'
export default {
  methods: {
    ...mapMutations(['sub']),
    subs() {
      this.sub()
    }
  },
  computed: {  再计算属性中使用 ...mapSate辅助函数展开  因为count 是一个数组
    ...mapState(['count'])
    count(){
        return this.$store.state.count
}
  }
}
</script>

<style></style>

如何调用 mutation中的方法?

 

 

 上图是已经定义好的 方法

一、通过this.$store.commit('属性名',更改的值) 更改的值可以不带 根据在mutation中定义的方法

 二、通过辅助函数

 

 如何使用actions 修改异步操作呢?

已经定义好的方法 

 1.直接通过 this.$store.dispatch('方法名') 来调用 可以传参

2.通过辅助函数 导入 然后...map 映射方法名

import {mapActions} from 'vuex'

...mapActions(['方法名'])

  通过原始形式action进行异步操作
    <button @click="btyb">原始函数123</button>
    通过辅助函数形式形式action进行异步操作
    <button @click="getAsyncCount(333)">辅助函数方式1  333</button>
<button @click="btnss">辅助函数方式2333</button>
  </div>
</template>

<script>
import { mapActions } from 'vuex'
export default {
  methods: {
    btn() {
      this.$store.commit('add')
    },
    btns() {
      this.$store.commit('addd', 10)
    },
    btyb() {
      this.$store.dispatch('getAsyncCount')//不传参
this.$store.dispatch('getAsyncCount',333)//传参
    },
    ...mapActions(['getAsyncCount'])
    btnss(){
        this.getAsyncCount()//不传参
    this.getAsyncCount(333)//传参
}
  }
}

vuex中的getters ?

getters 就是vuex中的计算属性。

 如何引用getters呢?

一种直接通过$store.getters.计算属性名

另一种通过..mapGetters(['计算属性名']) 来映射

 Vuex中的模块化 module?

如果把所有的状态都放在state对象中,当项目的状态越多,vuex会变得难以维护。

简单应用模块化?

先定义

 

取值方式1

通过getters (根级别的)方式进行取值

 首先现在 根getters中定义方法的属性名 并且配置获取的方法

 在组件中 引入 map辅助函数 通过...获取

模块化命名空间 ?

默认情况下,模块内部的actions,mutations.getter是注册全局命名空间的,这样使得多个模块能够对mutation 或 actions 做出相应,。

如何更新子模块的数据呢?

默认 这样数据的高密封性不够 可以使用下图方式调用 也可以使用辅助函数...map方式调用

 如何解决这种问题?

给子模块加一个锁 namespace:true  这样 上述的方式就获取不到数据了

加锁之后 如何调用呢?

一、直接通过 加路径的方式进行访问

 二、通过辅助函数的方式进行调用

 三、通过createNamespacedHelpers 辅助函数

先引入 然后创建 独立于module 模块的

 

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值