您当前的位置: 首页 > 

梁云亮

暂无认证

  • 1浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Vuex详解

梁云亮 发布时间:2022-07-05 09:11:03 ,浏览量:1

理论基础

Vuex 是一个专为 Vue.js 应用程序开发的状态管理解决方案。它采用集中存储的方式管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 在这里插入图片描述

最后做下总结,我们使用 Store/State 定义和管理应用的核心数据,在组件中通过compute属性调用Getters 中的数据,如果我们要操作数据,我们可以通过使用 dispatch 方法调用已注册的 Actions 方法,Actions 再去调用相关的 mutations 进行数据的操作。

  • State:数据,整个应用的数据中心,应用的相关组件在这里获取数据或更新数据,是整个应用唯一的数据中心。
  • Store:数据中心的管家,只能在数据中心的内部进行更改,外部组件无法直接更改State,只能依赖dispatch action(行为调度) 或 commit a mutation(提交mutation)间接操作。
  • Getters:Getters 的本质就是 Vuex store 的 computed 属性,读取 store/state 的内容,Getters中的数据将会被缓存,数据更新时其依赖的相关组件的状态也会随之及时更新。
  • Mutations:改变数据的状态。在应用中共享全局数据状态时,也会导致一些问题,因为数据的改变可以来自任何组件,因此很难定位和跟踪数据的状态。因此 Vuex 提出了使用 Mutations 这种方式来更改数据的状态,并不是直接进行更改。Vue devtools 工具能很好很准确帮我定位哪些更改以及何时进行的更改。
  • Actions:异步改变。如果要执行异步任务或多个相关的Mutations去更新数据状态时,我们需要 Actions 去定义函数进行操作,其函数第一个参数context可以获state, commit 和 getters 的相关属性,方便我们组织定义更复杂的逻辑。比如我们常用的接口数据请求获取数据,就会经常用到Actions。

安装命令:npm install vuex@4 -S

示例一:
  • 第一步:修改store目录下的index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
  state: {
    count: 1000
  },
  mutations: {
    add (state) { // 注册事件:同步方法
      state.count++
    }
  },
  actions: {
    delayAdd (context) { // 触发事件:异步方法
      setTimeout(() => {
        context.commit('add')
      }, 1000)
    }
  },
  modules: {}
})
  • 第二步:Vue页面一

  
    {{count}}
    add
  


  export default {
    computed: {
      count () {
        return this.$store.state.count
      }
    },
    methods: {
      add () {
        this.$store.commit('add')
      }
    }
  }

页面默认显示数字10,每一次单击按钮,数字立马增加1.
  • 第三步:Vue页面二

  
    {{count}}
    add
  


  import { mapState } from 'vuex'
  export default {
    computed: mapState({
      count: 'count'
    }),
    methods: {
      add () {
        this.$store.dispatch('delayAdd')
      }
    }
  }

页面默认显示数字10,每一次单击按钮,数字1秒钟后增加1.

示例二:计算属性Getters
  • 第一步:修改store目录下的index.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 10
  },
  getters: {
    getCount (state) {
      return state.count
    }
  },
  mutations: {
    addition (state) {
      state.count++
    }
  },
  actions: {},
  modules: {}
})
  • 第二步:Vue页面

  
    {{count}}
    add
  


  export default {
    computed: {
      count () {
        return this.$store.getters.getCount
      }
    },
    methods: {
      add () {
        this.$store.commit('addition')
      }
    }
  }

页面默认显示数字10,每一次单击按钮,数字立马增加1

示例三:模块化Modules
  • 第一步:在store目录下创建visit.js:
export default {
  state: {
    count: 0
  },
  getters: {
    getCount (state) {
      return state.count
    }
  },
  mutations: {
    addition (state) {
      state.count++
    }
  },
  actions: {},
  modules: {}
}
  • 第二步:修改store目录下的index.js文件
import Vue from 'vue'
import Vuex from 'vuex'
import visit from './visit'

Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    visit
  }
})
  • 第三步:Vue页面

  
    {{count}}
    add
  


  export default {
    computed: {
      count () {
        return this.$store.getters.getCount
      }
    },
    methods: {
      add () {
        this.$store.commit('addition')
      }
    }
  }

页面默认显示数字0,每一次单击按钮,数字立马增加1

关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0735s