State
Getters
Mutations
actions
modules

异步修改数据

  1. 使用 this.$roure.dispatch(“方法名”) actions 里的方法
    2. 在actions对应的方法里.commit(“newName”) 再发送到mutations里进行改变,此时的newName就是Mutations里对应的方法名

Action 可以包含任意异步操作,Action的作用就是异步触发Mutations
定义action对象
接收一个context参数和一个要变化的形参
context与store实例具有相同的方法和属性,所以他可以执行context.commit(“”),也可以使用 context.state和 context.getters 来获取 state 和 getters。

  1. export default createStore({
  2. state: {
  3. name: 'State'
  4. },
  5. mutations: {
  6. newName(state, playload) {
  7. //传入第二参数
  8. state.name = playload;
  9. }
  10. },
  11. actions: {
  12. actionName(context) {
  13. // context的作用与组件上的this.$store作用一样,但两者还是会有区别
  14. context.commit('newName', 100000000)
  15. }
  16. }
  17. })

使用this.$store.dispatch(“方法名”)方法执行Actions

  1. //这个是在组件中使用的生命周期函数
  2. mounted(){
  3. console.log('name修改前:',this.$store.state.name)
  4. this.$store.dispatch("actionName")
  5. console.log('name修改后:',this.$store.state.name)
  6. },

同样Action还支持载荷方法,传入第二形参

  1. actions: {
  2. actionName(context,playload){
  3. return context.commit('newName',playload)
  4. }
  5. }
  6. mounted(){
  7. console.log('name修改前:',this.$store.state.name)
  8. this.$store.dispatch("actionName","qazwsxedc")
  9. console.log('name修改后:',this.$store.state.name)
  10. },

输出
image.png

异步对象的解构2

  1. const moduleA = {
  2. state: {
  3. name: "我是A模块的name"
  4. },
  5. gettres: {},
  6. actions: {
  7. //这里我只取出context里的这3个属性{ state, commit, rootState }来使用
  8. async fangfa({ state, commit, rootState }) {
  9. commit("setjieshou")
  10. }
  11. },
  12. mutations: {},
  13. }
  1. export default createStore({
  2. state: {},
  3. mutations: {
  4. setjieshou(state, value) {
  5. console.log(value);//这样就可以赋值给数据state
  6. }
  7. },
  8. actions: {},
  9. modules: {
  10. a: moduleA,
  11. b: moduleB
  12. }
  13. })

vuex 单文件结构分离

image.png
单文件分离
image.png
image.png
image.png
image.png
image.png