likes
comments
collection
share

“当财务总监遇上前端:Vuex,大型项目中的数据理财专家”

作者站长头像
站长
· 阅读数 22

在小型项目中,组件之间的状态管理往往可以通过props和事件来完成,然而,随着项目规模的增大,这种点对点的通信方式变得难以管理和维护。这时候,就需要一种集中式的状态管理方案来帮助我们更好地控制追踪数据流。这就是Vuex存在的意义——在大型项目中扮演“财务总监”的角色,专业打理数据流,确保数据的有序流动一致性

 “当财务总监遇上前端:Vuex,大型项目中的数据理财专家”

一、Vuex:数据流的中央银行

想象一下,如果你是一家大公司的CEO,你不会希望每一个部门都自行管理财务,因为这会导致混乱和资源浪费。相反,你需要一个财务部门来统一管理资金,确保资金的合理分配和使用。在Vue.js的大项目中,Vuex就扮演着这样的角色,它将分散在各个组件中的状态收归中央,统一管理,保证数据的准确性一致性

二、Vuex的架构:State, Getters, Mutations, Actions

  • State:相当于财务部的金库,存储了应用的所有状态。在Vuex中,所有状态都是响应式的,这意味着一旦状态改变,所有依赖于该状态的组件都会自动更新。
  • Getters:可以理解为财务报告,它是对state的衍生状态的计算结果,类似于Vue中的computed属性。Getters可以帮助我们更方便地获取state中的复杂数据。
  • Mutations:相当于财务部的记账规则,是唯一可以改变state的方式。Mutations必须是同步函数,这使得我们可以更容易地追踪状态的变化,有利于调试和维护。
  • Actions:动作就像是财务部门的业务流程,它包含了异步操作逻辑,可以包含多个mutations和其他actions。Actions提供了更高级别的抽象,让我们可以处理更复杂的业务逻辑,比如网络请求。

三、安装与使用Vuex

  • 首先,在项目中引入Vuex,首先需要通过npm安装:
npm install vuex
  • 然后,在你的项目中创建一个store:
import { createStore } from 'vuex' // 只有一个store

// 全局状态
// 状态对象
const state = {
    count: 0, // 计数状态
    user: null, 
}

// 修改,要按流程 动作
const actions = {
    increment: ({ commit }) => {
        console.log('//////')
        // commit 提交一项修改 提交给上级mutations
        commit('increment')
    }
}

// 所有的状态修改都要经过mutations
// 只有mutations可以修改状态
const mutations = {
    increment(state){
        console.log('??????')
        state.count++
    }
}

// 除了读操作,对写操作非常严格
const store = createStore({
    state,
    mutations,
    actions
})

export default store
  • 接下来,在你的主应用文件中使用store:
import { createApp } from 'vue'
import App from './App.vue'
import store from './store' // 状态仓库

const app = createApp(App)
app
    .use(store)
    .mount('#app')

四、读取和修改状态

  • 读状态:在组件中,你可以通过store.state直接访问state中的数据,或者使用useStore辅助函数将其映射到组件的计算属性中。
import { useStore } from "vuex";
import { computed } from "vue";

const store = useStore() // hooks 编程
console.log(store.state.count);
const count = computed(() => store.state.count)
  • 写状态:要改变state中的数据,我们不能直接修改state,而应该通过提交mutation来完成。在组件中,你可以使用store.commit方法提交mutation。
const increment = () => {
  store.commit('increment')
}
  • 更进一步,我们可以使用actions来处理更复杂的逻辑,比如异步请求数据:
const increment = () => {
  // 派出 increment方法 action
  store.dispatch('increment')
}

五、Vuex的高级特性

  • 模块化:在大型项目中,Vuex支持模块化,可以将state、mutations、actions和getters组织成模块,使得代码结构更加清晰。
  • 插件系统:Vuex支持插件,可以扩展其功能,比如集成第三方库、状态持久化等。
  • 调试工具:Vuex与Vue DevTools集成,提供了一套完整的调试工具,帮助开发者追踪和理解状态的变化。

六、结论

在大型Vue.js项目中,Vuex就像一位专业的财务总监,管理着复杂的数据流,确保数据的有序流动和一致性。通过Vuex,我们可以更高效地处理复杂的状态管理需求,让我们的项目更加健壮和易于维护。随着项目规模的增长,引入Vuex将会是一个明智的选择,它能帮助我们更好地掌控数据,让应用更加稳定和高效。

转载自:https://juejin.cn/post/7393740927154831396
评论
请登录