一:src目录下新建store目录用来写vuex的各个模块
二:store目录下新建state.js文件,该文件内写将要用vuex存储的数据,目前先存储一个登录状态login和角色role
三:store目录下新建mutations.js文件,该文件用来定义 修改state.js内部的数据 的函数
想要修改 state.js内部定义的变量,必须用mutations.js内部相应的方法进行修改
四:store目录下新建actions.js,
使用场景:比如我们一个h5商城,后端会在登录成功的的接口中返回cookie以及角色类型,然后将cookie自动存储在浏览器的缓存中;在登录成功之前,我们都是无cookie去后端请求数据,用户看到的信息也是未登录才能看到的信息;一旦登录成功,cookie已经存储在浏览器中,这时候请求中就可以带上cookie,用户就可以看到登录之后的信息。
像这种权限判断,我们需要在全局路由中进行判断,角色请求这块可以actions中封装,因为每个页面可能都涉及权限的判断(有cookie直接请求权限接口,设置role;没cookie,在登录成功进行跳转的时候,设置role),封装起来用着更方便
五:store目录下新建index.js文件
六:在项目的入口文件main.js中引入store/index.js文件,然后在vue实例中进行注入
import store from './store'
此时我们就可以去相应的组件内部 获取 或者 修改 vuex存储的数据
调用mutations可以使用...mapMutations,这样相当于给方法其一个别名;我们也可以使用this.$store.commit('SET_LOGIN', true);异步使用actions,调用方式是 thiiis.$store.dispatch('actionsFnName')
上面是修改vuex中的login值,那看一下如何获取vuex的login值
可以根据以上两种方式进行获取,vuex内部的值放在computed可以实现数据的实时变化;当然也可以通过this.$store.state.login进行获取。
对于actions的使用场景,可能一两句说不清楚。很多地方都说的是 异步存储用actions,但是异步的可以直接在回调中调用mutation,为什么要把异步的业务逻辑放在acrions中去实现,而不是直接在页面的对应逻辑中实现
同步调用的用mutation,当涉及到异步调用且有复用可能的,或者有将业务逻辑封装起来的需要用action,异步无复用可能的直接使用mutations即可