状态管理插件vuex

概念:

专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。

作用:

如果我们使用全局总线要让所有的组件进行修改就会引出这么多条线:

状态管理插件vuex_第1张图片

如果使用vuex,这个x就不属于任何组件

状态管理插件vuex_第2张图片

什么时候使用Vuex——————共享

1.多个组件依赖于同一状态

⒉.来自不同组件的行为需要变更同一状态

vuex工作原理:

状态管理插件vuex_第3张图片
如果不发送ajax请求可以忽略actions这条线,直接去mutations,actions中放业务逻辑,有判断的时候进行操作

引入的坑

状态管理插件vuex_第4张图片

引入会被自动提前,str2会在100和200之前输出

1.我们应该在main.js中引入store状态管理插件vuex_第5张图片

2.在store中的index中引入vuex

状态管理插件vuex_第6张图片

错误的引入方式

状态管理插件vuex_第7张图片
我们vuex和store在同一个文件进行引入!!!这么做是错误的,因为第十行一写,第十行里面的代码就执行完了,也就是下面这些代码被执行完了:

状态管理插件vuex_第8张图片

但是在执行当中创建了store实例,但是我们还没有执行下面这个代码在这里插入图片描述

会造成顺序错误


不要忘记将store配置到vue中

状态管理插件vuex_第9张图片


2.组件中读取vuex中的数据:$store.state.sum
3.组件中修改vuex中的数据:$store.dispatch('action中的方法名' ,数据)$store.commit( 'mutations中的方法名',数据)

写一个加的案例

组件中

状态管理插件vuex_第10张图片

store中

状态管理插件vuex_第11张图片
1.mutation中只进行加减,不要放任何业务逻辑。

2.context是一个迷你版的store,commit函数就在这个上下文对象里,提交给后面的函数运行

如果业务逻辑很简单,没有判断等等,那么我们就不需要dispath,直接commit!

状态管理插件vuex_第12张图片

那么我们可以将下面红色框的东西删除!!

状态管理插件vuex_第13张图片

如果业务逻辑很多可以这样连环使用

状态管理插件vuex_第14张图片


注意点

1:不要直接在action里面操作state里面的数据

状态管理插件vuex_第15张图片
这么写虽然会实现效果,但是开发者工具失效了,因为通过图片我们可以知道我们的开发者工具是跟mutations直接对话的!!

状态管理插件vuex_第16张图片

2.可不可以不把逻辑写在actions里面,直接写在组件的方法里面呢?

状态管理插件vuex_第17张图片
如果逻辑很大,比如说发票真伪判断。假如说我们写在方法里面,我们所有的组件自身都需要一个真伪判断,如果我们抽象到actions里面,那么就只需要一个判断方法,提高复用性。
状态管理插件vuex_第18张图片


getters配置项

1.概念:当state中的数据需要经过加工后再使用时,可以使用getters加工。

2.在store.js中追加getters配置

状态管理插件vuex_第19张图片

3.组件中读取数据:$store.getters.bigSum

在这里插入图片描述


mapSate 与map.Getters

1.借助mapState生成计算属性,从state中读取数据

状态管理插件vuex_第20张图片
我们的$store.state.sum 有点长,如果我们只需要显示sum就能代表这一堆东西那么我们该怎么办?

计算属性可以解决这个问题:
在这里插入图片描述

这里我们的he就可以代表我们的$store.state.sum,那如果有一堆这样的东西,是不是我们需要把我们所有的都配置成计算属性呢?

我们就需要使用到我们的mapSate

状态管理插件vuex_第21张图片

状态管理插件vuex_第22张图片

红色框里面的东西等价于外面粉色框的计算属性。

如果计算属性名和我们state中的名字是一样的,那么我们可以写成简写形式:

在这里插入图片描述

千万不能省略引号!!

如果没有引号就是sum:sum,就会导致后面的解析错误!!!因为没有后面那个sum变量,前面能省略引号是因为我们的js中的简写,所以我们简写的时候必须要加上引号

2.mapGetters

引入
在这里插入图片描述

例子

状态管理插件vuex_第23张图片


mapActions与mapMutations

mapMutations使用:借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(对象写法)

修改第一个地方,这个地方的参数一定不能省去,不加参数就会报数。
状态管理插件vuex_第24张图片

上面红色框代码等价于绿色框代码

状态管理插件vuex_第25张图片

mapActions

状态管理插件vuex_第26张图片
使用的地方记得传入参数

在这里插入图片描述


多组件共享数据

向state里面加数据

1.设置一个点击事件

状态管理插件vuex_第27张图片

我们存数据可以直接走mutations这条线!!

2.配置mutations里面的方法,在state里面配置一个列表,是可以共享的属性

状态管理插件vuex_第28张图片

3.在person的methods中放入add点击事件的方法,然后关联到mutations里面的方法ADD_PERSON,名字不要错!

状态管理插件vuex_第29张图片


vuex的模块化编码

1.目的:让代码更好维护,让多种数据分类更加明确。

状态管理插件vuex_第30张图片

2.修改store.js

状态管理插件vuex_第31张图片

3.开启命名空间后,组件中读取state数据:
在这里插入图片描述

4.开启命名空间后,组件中读取getters数据:

在这里插入图片描述

5.开启命名空间后,组件中调用dispatch
在这里插入图片描述
6.开启命名空间后,组件中调用commit
在这里插入图片描述

你可能感兴趣的:(vue,vue.js,javascript,前端)