博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mutations vuex 调用_vue 学习记录六——vuex
阅读量:5870 次
发布时间:2019-06-19

本文共 2085 字,大约阅读时间需要 6 分钟。

上一篇写了组件通讯,感觉通讯方法很不统一,对于大项目来说,可能是灾难性的路线。vuex为我们提供了一个内存级别的db,存储我们需要处理的数据。还为我们提供一条确定方向的路径给我们进行数据转换处理。state 的数据只能由Mutations 改变,并且这里的方法不能进行异步处理,如果需要异步处理,只能在Action中。如果不需要异步处理,其实也是可以直接调用Mutations来修改state中的数据的。

4ba03fbbc43e3bc40f07556ca6514f3e.png

上面的路径可以这样解释:页面的组件通过Dispatch 来调用Vuex的Actions 进行Actions逻辑处理数据,将处理好的数据通过commit 进行Mutations 调用进行数据逻辑处理并且修改state中的存储的数据,state 是响应式的,只要state中的数据发生修改,会重新渲染组件。这是一条非常精确的路径,state是全局的,所有的组件都可以直接访问。在使用vuex前后的组件通讯如下图所示:

a4cd9120276083fe9c427f9868dfa5e5.png

如上图,组件1向组件2发送消息,可能的路径是1->3->4->5->6->2 或者通过EventBus,那如果2 传给4,4传给6呢,那就得非常的复杂操作了。使用Vuex就非常简单了,state中存储所有需要动态传递的数据,如果需要,直接从state中获取就可以了。

vuex如同这次疫情,统一由中央指挥,统一对外发布消息,各个省份可以通过Mutations来向中央上传数据。中央数据修改后就会正式对外发布,然后各地方都可以直接接收到消息。

Vuex有四大核心,Action、Mutations、getter、State、module。

Action:组件需要通过Dispatch 来调用Action,在Action中可以进行异步逻辑处理,例如使用ajax来获取db数据等。当然,也可以不进行异步逻辑处理。Action 通过commit将数据传递给Mutations处理,以完成对state的相关数据修改,Action不能直接修改state中的数据;

Mutations:不能进行异步逻辑,是唯一可以修改state中的数据方法块。

Getter:可以对sate中的数据进行获取,并且进行二次加工的逻辑块。

State:存储数据的数据中心,具有响应式特点,即数据发生修改,会自动渲染到组件。

Module:将store进行划分模块,相互之间就不进行干扰。

下面各个介绍相关的使用:

1、使用vuex:

1)安装vuex,npm install vuex --save

2)import Vuex from 'vuex'

Vue.use(Vuex) //在vue中挂载vuex

e6831327ba0f7e6f53f62622441d13b2.png

ede02600a4c4e96a99021e3f88effd76.png

下面介绍各部分的使用方法

1、state:数据存储中心,状态中心,使用方法有二种

1)使用 this.$store.state.属性名称,例如:this.$store.state.属性名称

843a2e1af686fd0f0d5c7e6d3b281ea0.png

85675daa34f396fe0e8222190e3d60a6.png

2)使用 mapState 方式来调用,将全局变量设置为可计算属性,然后调用

import { mapState } from 'vuex'

321a309b929a1094fda1b2b52f9b465b.png

2、Mutation:可以修改store数据的方法块,不允许有异步逻辑,使用方法有二种:

1)使用 this.$store.commit('Mutation的方法名称','参数'),如下图:

fc33622d1d8f6d165b9d262fb26dbde5.png

c8f97f105f2b4b128dce5e08e09b4453.png

2)使用 mapMutations 方式来调用,将全局变量设置为监控方法,然后就可以使用this.mutations方法来调用了,如:

602e2f18e50cd7a1c1c559191e677b27.png

3)Action,允许处理异步逻辑,一般可在action里写db数据处理。Action也可以有二种方式执行;

1)this.$store.dispatch() 方式调用执行,如下图:

296d4c87a2eac743043f82bb86a15a6d.png

fc9703beecf51c9b03497da82f4679c9.png

2)import { mapActions } from 'vuex' 方式调用

dd247b09d00c790e3d1966a33e582853.png

08021e02ecd4ecec741e1e4def5bcc88.png

4、Getter ,用于对Store中的数据进行加工处理形成新的数据,类似Vue的计算属性;Store中的数据发生变化,Getter的数据也会跟着变化。有二种方法进行调用:

1)this.$store.getters.方法名称,如下图:

f085a2186e69408a3020507a6a422b7d.png

93f51d615f94814e0ed495ed83559868.png

2)通过import { mapGetters } from 'vuex',然后设置计算属性,如下图:

f32d0cd8035068b8999d3d6d82131b05.png

5、Module 将state进行模块划分。

const moduleA = {

state: { ... },
mutations: { ... },
actions: { ... },
getters: { ... }
}
const moduleB = {
state: { ... },
mutations: { ... },
actions: { ... }
}
const store = new Vuex.Store({
modules: {
a: moduleA,
b: moduleB
}
})
store.state.a // -> moduleA 的状态
store.state.b // -> moduleB 的状态

好了,vuex 就先这么多东西,已经够我们的vue-dx 使用了。

转载地址:http://wutnx.baihongyu.com/

你可能感兴趣的文章
嵌入式Linux C语言(二)——指针
查看>>
Java基础学习总结(8)——super关键字
查看>>
listview当选中某一个item时设置背景色其他的不变
查看>>
Eclipse Indigo 3.7 中文字体偏小解决方案: Consolas 微软雅黑混合字体!
查看>>
Hive 0.11 升级踩坑记——HiveServer2的imperson问题
查看>>
Maven学习总结(七)——eclipse中使用Maven创建Web项目
查看>>
Spring MVC常用注解说明
查看>>
CetOS(RHEL) 5.3下网卡绑定设置指南
查看>>
在Javascript中闭包(Closure)
查看>>
omap_hwmod: rtc: doesn't have mpu register target
查看>>
Linux执行ls,会引起哪些系统调用
查看>>
Linux 32位系统支持4G以上内存
查看>>
记录一些有用的代码技巧,不定期更新
查看>>
打造全民健康平台 加速实现智慧医疗
查看>>
集成商聚焦
查看>>
CentOS5.8配置×××服务器
查看>>
Monkey测试
查看>>
2014-8-10 北漂三周年
查看>>
tornado 服务器 - 读写2进制rest请求
查看>>
IBM is still thinking!
查看>>