当前位置:   article > 正文

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

vuex state

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

state 存放数据的

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

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

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

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

modules 模块化

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

三种方法获取存储的数据

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

2.在计算属性中使用

  1. <template>
  2. <div>
  3. 计算属性 count值为{{count}}
  4. <button @click="subs">-1</button>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. },
  10. computed: {
  11. count(){
  12. return this.$store.state.count
  13. }
  14. }
  15. }
  16. </script>
  17. <style></style>

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

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

  1. <template>
  2. <div>
  3. 当前最新的cout值为{{ $store.state.count }}
  4. 辅助函数获取的count值为{{count}}
  5. <button @click="subs">-1</button>
  6. </div>
  7. </template>
  8. <script>
  9. import { mapState, mapMutations } from 'vuex'
  10. export default {
  11. methods: {
  12. ...mapMutations(['sub']),
  13. subs() {
  14. this.sub()
  15. }
  16. },
  17. computed: { 再计算属性中使用 ...mapSate辅助函数展开 因为count 是一个数组
  18. ...mapState(['count'])
  19. count(){
  20. return this.$store.state.count
  21. }
  22. }
  23. }
  24. </script>
  25. <style></style>

如何调用 mutation中的方法?

 

 

 上图是已经定义好的 方法

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

 二、通过辅助函数

 

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

已经定义好的方法 

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

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

import {mapActions} from 'vuex'

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

  1. 通过原始形式action进行异步操作
  2. <button @click="btyb">原始函数123</button>
  3. 通过辅助函数形式形式action进行异步操作
  4. <button @click="getAsyncCount(333)">辅助函数方式1 333</button>
  5. <button @click="btnss">辅助函数方式2333</button>
  6. </div>
  7. </template>
  8. <script>
  9. import { mapActions } from 'vuex'
  10. export default {
  11. methods: {
  12. btn() {
  13. this.$store.commit('add')
  14. },
  15. btns() {
  16. this.$store.commit('addd', 10)
  17. },
  18. btyb() {
  19. this.$store.dispatch('getAsyncCount')//不传参
  20. this.$store.dispatch('getAsyncCount'333)//传参
  21. },
  22. ...mapActions(['getAsyncCount'])
  23. btnss(){
  24. this.getAsyncCount()//不传参
  25. this.getAsyncCount(333)//传参
  26. }
  27. }
  28. }

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 模块的

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/256927
推荐阅读
相关标签
  

闽ICP备14008679号