初学Vuex

    科技2026-04-06  12

    Vuex

    Vuex是做什么的? 官方解释:它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 Vux也集成到Vue的官方调试工具 devtools extension,提供了零配值的time-travel调试、状态快照导入导出等高级调试功能。

    状态管理模式、集中式存储管理是什么? 简单来说,把多个组件共享的变量全部存储在一个对象里面,然后将这个对象放在顶层的vue实例中,让其他组件可以使用。Vuex就是为了提供响应式组件共享变量的管理插件。

    vuex的单一状态树(单一数据源):所有的东西放在一个vuex实例对象里面。

    在vue项目中使用

    1.安装(npm安装)

    npm install vuex --save

    2.创建store(仓库)文件包,方便统一管理 3.在store的index里面安装vuex插件

    import Vue from "vue"; import Vuex from 'vuex' Vue.use(Vuex)

    4.创建对象,并且导出

    const store = new Vuex.Store({ }) export default store

    5.挂载创建的对象(在外面的main.js中)

    import store from './store' Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', store, render: h => h(App) })

    store对象内部

    const store = new Vuex.Store({ state:{ counter: 1000, }, mutations:{ decrement(state) { state.counter-- } }, actions:{ }, getters:{ powerCounter(state) { return state.counter * state.counter } }, modules: { a: moduleA, b: mudeleB } })

    state

    1.state(多方可get读取数据,但是只能特定地方set写数据):保存状态(组件变量)

    取state里面的变量:

    <h2>{{$store.state.counter}}</h2>

    这里最好不要用来改变state里面的值,如果这样直接改值,就代表任何组件都可以对state进行修改,然后其他组件用state里面的数据时也就改变了,不再是单一状态管理了。(在mutations里面改值)

    mutations

    2.mutations:使用mutations里面定义的方法,在其他组件的methods里面取mutations里面的方法,然后直接用。

    methods: { subtraction() { this.$store.commit('decrement') }, }

    如果mutations里面方法有参数:

    methods: { incrementCount(state, payload) { // console.log(count); state.counter += payload.count } }

    使用的时候:

    methods: { addCount(count) { payload: 负载 this.$store.commit('incrementCount', count) } }

    getters

    3.getters:可以看成store的属性计算(getters里面除了第一个参数state外,还有可以有第二个参数getters。) 在其他组件中使用:

    <h2>{{$store.getters.powerCounter}}</h2>

    如果想在getters里面接收其他参数,那么可以这样:

    gettters:{ moreAgeStu(state) { // return function (age) { // return state.students.filter(s => s.age > age) // } return age => { return state.students.filter(s => s.age > age) } } }

    外部使用

    <h2>{{$store.getters.moreAgeStu(12)}}</h2>

    actions

    4.类似mutations;Actions 提交的是 mutation,而不是直接变更状态;Actions 可以包含任意异步操作(异步操作封装方法写在actions里面)。

    这里关于异步和同步我的理解: 同步:刚刚打开一个网页的时候,会去请求html、css、js,这个时候如果没有完成,网页无法加载成功,也就是同步。 异步:网页打开后,假设点击后需要请求新的数据时,但是任然不影响网页其他,这个时候就是异步。

    modules

    5.mudules:在vuex中使用单一状态树,也就是只有一个store,所有这个store中可能会比较拥堵,这个时候可以对store里面的内容进行划分,所有可以在modules定义多个对象,每一个对象就是一个store。

    modules: { a: moduleA, b: mudeleB }

    这里对象a、b就是2个modules对象。 在每一个对象里面可以定以一个和store对象一样结构的

    const modeulesA = { state: { name: 'zhangsan' }, mutations: { }, getters: { }, actions: { } }

    使用a里面的数据:

    <h2>{{$store.state.a.name}}</h2>
    Processed: 0.016, SQL: 9