一、什么是状态管理?
二、vuex 的基本使用
注意:vuex里的数据都是响应式的
1、安装vuex
npm install vuex@next
注意:vuex@next的意思是安装最新版本的vuex
2、创建Store
3、在组件中使用store
三、单一状态树
注意:虽然一个应用可以创建多个store,但是建议只创建一个store实例
三、vuex的五大核心
1、state
注意,state属性为一个函数返回一个对象 和data一样
使用opctionsAPI computed展示state:
用于展示state的辅助函数 mapState
在optionsAPI computed中使用:
上边的两种写法很笨重,所以vuex提供了一个函数-----mapState,mapState就是对state进行一个映射,mapState()函数返回一个对象。这个函数要求传入一个参数,这个参数可以是数组形式,也可以是对象形式。
数组形式:数组里边写你想要映射过来的对应的state的key
对象形式: 如果你担心counter,name,age等映射过来的名字可能会跟你在组件data中定义的名字冲突,可以使用对象形式。对象形式可以对store实例中state中的状态重新命名
在compositionAPI 中使用:
在compositionAPI中使用computed()展示state:
但是上边的方法太麻烦了,我们想要使用mapState()函数来展示state就需要这样:
下边的方法灵感来自于coderwhy老师
也可以使用高阶函数封装成一个hook:
useState()函数不仅可以穿进去一个数组 也可以是对象。因为传进去的数组或者函数就是mapState()函数在操作。
2、getters
某些属性我们可能会经过变化后使用,这时候就可以使用getters
getters的基本使用
getters也可以返回一个函数:
return一个函数的应用场景就是这样可以接收参数了,因为本来getters是不能接受参数的(除了state,getters之外不能接受其他的参数)
mapGetters
mapGetters在opctionsAPI 中结合 computed的使用:
mapgetters对象写法:
mapGetters在 compositionAPI 中结合 computed() 的使用:
自己写的:
老师封装的hook:
3、mutation
更改 Vuex 的 store 中的状态(state)的唯一方法是提交 mutation
注意:mutation里不能有异步操作
基本使用
mutation携带数据
另一种提交方式
辅助函数mapMutations
对象写法以及传参:
setup中的写法:
4、actions
actions的基本使用
当你想把一些异步操作从组件内放到vuex里边的时候,不能直接放到mutation里边,因为mutation不允许有异步操作,需要放到action然后通过action提交mutation
在actions里异步操作:
在组件内实现异步操作然后更改state状态:
在actions里实现异步操作:
携带参数:
辅助函数mapActions:
mapActions在compositions中使用:
如果你想在组件内监听到网络请求什么时间结束,可以这样写:
action函数本身其实可以返回一个Promise
module的基本使用
modules里的getters参数:
如果想在modules中的 actions 提交commit来修改根部state中的状态需要这样写:
dispath同上边这张图一样,context.dispath(‘incrementAction’,null,{root:true});
module的辅助函数
方式二的演示:
方式三的演示: