Vuex工作原理:像点奶茶一样简单!

156 阅读2分钟

大家好,我是小杨,做了6年前端的老油条。今天咱们不聊虚的,就用奶茶店点单的栗子🌰,把Vuex的核心流程给你整得明明白白!(文末有【避坑指南】,新手必看!)


🧋 先看场景:没有Vuex的混乱世界

想象你在奶茶店:

  • (组件)对店员说:"要一杯珍珠奶茶"
  • 你朋友(另一个组件)又说:"不要珍珠了,改椰果"
  • 结果店员懵了,两杯都做了...

这就是组件间直接传值的问题:数据混乱,难以追踪


🚀 Vuex怎么解决问题?

Vuex就像奶茶店的中央订单系统

// 1. 创建store(中央仓库)
const store = new Vuex.Store({
  state: { 
    order: "空" // 当前订单状态
  },
  mutations: {
    // 2. 唯一修改订单的方式(类似店员接单)
    SET_ORDER(state, payload) {
      state.order = payload;
    }
  },
  actions: {
    // 3. 处理异步操作(比如加料要等3分钟)
    async changeOrder({ commit }, newOrder) {
      await 我.等3分钟(); // 模拟异步
      commit('SET_ORDER', newOrder); 
    }
  },
  getters: {
    // 4. 计算属性(比如订单总价)
    orderWithPrice: state => `${state.order} | 价格:15元`
  }
})

工作流程四步走:

1️⃣ (组件)喊一嗓子:this.$store.dispatch('changeOrder', '芝士葡萄')
2️⃣ Action(店长):"等等,我先确认下库存..." → 调用commit('SET_ORDER')
3️⃣ Mutation(店员):老老实实修改state.order
4️⃣ 所有组件(顾客):自动收到新订单!


💡 为什么必须用Mutation改数据?

就像奶茶店规定:只有店员能改订单。如果让顾客自己乱改(直接修改state),迟早会出现"珍珠奶茶不要奶"的黑暗料理!


🚨 避坑指南(血泪经验)

  1. 不要跳过Action直接Commit

    • ❌ 坏习惯:this.$store.commit('SET_ORDER')
    • ✅ 正确姿势:用Action处理业务逻辑
  2. Module拆分技巧
    把大仓库拆成小仓库,就像奶茶店分点单区制作区

    const store = {
      modules: {
        order: orderModule, // 订单相关
        user: userModule   // 用户信息
      }
    }
    
  3. Map辅助函数真香
    少写this.$store,更优雅:

    computed:  {
      ...mapGetters(['orderWithPrice']),
    },
    methods: {
      ...mapActions(['changeOrder']),
    }
    

🌟 小杨的总结

Vuex本质就是制定规则

  • State:唯一数据源(订单本)
  • Mutation:唯一修改方式(店员权限)
  • Action:处理脏活累活(店长调度)
  • Getter:派生数据(订单小票)

下次写Vuex时,想想奶茶店怎么运作的,代码自然就溜了~ 如果还有疑问,评论区见,我请你喝(代码版)奶茶!

⭐  写在最后

请大家不吝赐教,在下方评论或者私信我,十分感谢🙏🙏🙏.

✅ 认为我某个部分的设计过于繁琐,有更加简单或者更高逼格的封装方式

✅ 认为我部分代码过于老旧,可以提供新的API或最新语法

✅ 对于文章中部分内容不理解

✅ 解答我文章中一些疑问

✅ 认为某些交互,功能需要优化,发现BUG

✅ 想要添加新功能,对于整体的设计,外观有更好的建议

✅ 一起探讨技术加qq交流群:906392632

最后感谢各位的耐心观看,既然都到这了,点个 👍赞再走吧!