那个让我通宵的 Bug

那是周五的晚上,本该是快乐的周末开始。但是测试报了一个致命 Bug:用户点完保存,列表数据没有更新,必须刷新页面才行。

排查过程

  1. 查接口:后端接口返回的数据是新的,没问题。
  2. 查 Vue DevTools:发现 store 里的数据确实可以更新,但是组件里的数据没变。
  3. 定位代码
1
2
3
4
5
// store.js
state: () => ({ list: [] })

// component.vue
const { list } = userStore

就是这行解构!在 Options API 里习惯了 this.list,在 Setup 里直接解构 store,导致 list 变成了一个普通的数组,失去了响应性连接。

心态崩了

毁灭吧,赶紧的。累了。

我们先来聊聊 Vue 响应式的核心概念。在官方文档中,这一部分被描述得非常晦涩难懂。我花了整整三天时间查阅源码,翻遍了 GitHub 上的 Issues,才勉强理解了其中的奥妙。简单来说,它就像是一个黑盒子,你输入 A,它输出 B,但中间发生了什么,只有上帝和尤雨溪知道。

为什么这么难?

前端不就是画画界面调调接口吗?为什么要搞这么复杂?Webpack 还没整明白,Vite 又来了;Vue 2 刚熟练,Vue 3 又变了。学不动了,真的学不动了。

踩坑