watch 侦听器的五种姿势与三个坑
从 watch 到 watchEffect,再到源码注释里的那句警告:不要在回调里修改被侦听的值。五种用法各有归属,三个坑我都替你踩过了。
~/personal-notes · frontend · since 2023
—— 把 bug 修成经验,把经验写成字
这是我的个人技术知识库:记录我在软件开发 —— 特别是前端技术领域的学习心得与实战经验。 这里有亲测好用的代码片段、主流框架的使用技巧,以及那些熬到深夜才定位到的疑难问题排查过程。
把踩过的坑,变成脚下的路。
这里是我的个人技术记录站点,主要记录我在软件开发 —— 特别是前端技术领域 —— 的学习心得与实战经验。 内容包括一些实用的代码片段、框架使用技巧,以及疑难问题的排查过程,旨在作为个人的知识库。
它首先是写给自己的复盘笔记:好记性不如烂笔头,踩过的坑只有记下来才不算白踩。 同一个问题在不同的项目里总会再遇见一次,那时候这份笔记就是最快的答案。 如果这些记录能顺便帮到正在经历同样问题的你,那就是它意外的价值。
按时间倒序排列 · git log --oneline --reverse
从 watch 到 watchEffect,再到源码注释里的那句警告:不要在回调里修改被侦听的值。五种用法各有归属,三个坑我都替你踩过了。
三层 !important 都压不住的样式,最后败给了一条被遗忘的属性选择器。附:一份我背下来的优先级速查表。
函数组件的每次渲染都是一次快照,你以为的 state,其实是上个世界的它。用四段最小复现代码讲透闭包捕获。
泛型不是玄学,是可推导的逻辑。从五个内置工具类型的实现开始,一步步推导出属于自己的 MyPick。
从 Performance 面板里一根刺眼的长任务开始,依次揪出三个阻塞主线程的元凶,最终白屏时间压到 400ms。
不依赖组件库,用两百行代码讲透虚拟滚动的全部本质:可视区域、缓冲区与绝对定位的数学。
从笔记里挑出来、被我自己复制次数最多的几段。
用更少的代码,做更多的事。
双向绑定不再需要 props + emit 的样板代码,一个宏搞定子组件 v-model,连类型都是自动推导的。
把昂贵的状态更新标记为「过渡」,输入框不再跟着一起卡顿,列表渲染再大也能保持响应。
不写一行 JavaScript,实现真正的「父级选择器」。表单联动、卡片高亮,从此优雅到不像话。
既校验类型是否匹配,又保留字面量的精确推断。是时候和 as 断言说再见了。
每个 bug 都有编号、症状、根因与结论 · status: all resolved