无限级菜单看着是个递归组件,实际牵着路由高亮、权限过滤、图标映射和接口数据清洗。这篇把该在数据层收干净的活,和只留给递归模板的活拆清楚。
响应式规则、props 单向流、watch 该管什么这些 Vue3 坑大多不是语法问题,而是组件逻辑该怎么组织没理清。这篇把自己从 Vue2 迁过来踩过的几个坑连同验证方法一起记下来。
请求库管的范围正从单纯的 HTTP 客户端往请求状态管理扩展:loading/data/error 三件套重复、旧请求覆盖新结果、缓存 key 设计,这些问题不是换个库名就能解决的,引入新方案的工程代价也要算清。
前端能拦住的只是显示,动态路由、菜单和按钮权限背后,真正该由谁负责校验安全,还得看接口。
从 Vuex 迁移到 Pinia,state/getters/actions 这几个 API 名字换起来最快,哪些状态值得全局化、模块该怎么拆、持久化和 SSR 水合的坑怎么避开,才是真正花时间的地方。
组件 API 一旦被多个页面引用就很难改。这篇整理 props 粒度、事件命名、v-model 边界和插槽尺度的判断标准,附带一个从 Vuex 挪到 Pinia 时暴露出来的耦合案例。
Composition API 好不好用,关键不在 API 本身,而在按什么维度拆代码——`setup` 里没有强制分区,状态、请求、事件、表单全塞进一个函数体也能跑,但两个月后改起来会很难受。
Composition API 不是给所有组件用的新写法,它解决的是逻辑跨选项分散的组织问题。这篇整理我们判断“要不要重写”的标准,以及一个真实组件的重写过程。
Vite 开发环境跳过打包直接用浏览器原生 ES 模块,冷启动和热更新为什么比 Webpack 明显快;同时记录 1.x 版本生态尚浅、只适合小范围尝鲜的真实局限。
重置按钮点下去只有一半字段回到了初始值——顺着这个现象拆开看,是 Vue 2 Mixins 的选项合并策略在两个同名方法之间做了取舍。梳理合并规则、命名冲突的隐蔽性,以及普通函数、组件组合、Composition API 三种替代方案各自的适用边界。
Vue 2 用 Object.defineProperty 逐个劫持属性,新增字段视图不更新,得靠 $set;Vue 3 换成 Proxy 整体拦截,这个动作差异背后是响应式机制的重写。这篇顺着这个差异往下拆,从 get/set 拦截讲到 ref/reactive 怎么选、解构为什么会断连接。
新项目起步该选 Vue CLI 还是 Vite,不该按新旧来判断,而要从生态成熟度、团队熟悉度、生产验证程度、插件完整性这几条核心维度起步,逐一对照再下结论。
梳理把 Vue 项目从 Vue CLI 迁到 Vite 的实际迁移代价:自定义 Webpack 配置、别名、环境变量、代理规则要怎么对应过去,以及为什么这个阶段只适合迁一个边界清楚的小项目。
单文件组件写起来舒服,但没有天然的分寸感——请求、状态、模板、样式全放一个 .vue 文件里也能跑。这篇讲清楚组件该按什么标准拆、请求逻辑该不该下沉到服务层、样式该归到哪一层,用一个从几十行长到七百多行的用户资料页组件贯穿说明。
组件通信真正难的不是传不到,而是状态在谁手里、该由谁负责更新。这里围着 props、emit、provide/inject、事件总线和 Vuex 的边界,重新讲一遍怎么选。
图表只画一半、容器宽度偶发性拿到 0,问题通常不在图表库,而在初始化时机。这里把 `created`、`mounted`、`activated` 和父子组件执行顺序放回同一个现场里理顺。
首屏慢很多时候不是内容太多,而是把不需要立刻出现的重组件也塞进了主包。这里从一个富文本编辑器拖慢详情页开始,把异步组件和懒加载判断标准理清。
权限改造看起来像“把菜单过滤一下”,真正要动的却是整套路由守卫、动态路由注入、刷新恢复和退出清理。这里把这些环节按项目改造顺序串起来。
首屏包太大时,最怕的是人人都在猜。这里从一张体积分布图出发,把 webpack-bundle-analyzer 怎么定位重模块、重复依赖和错误拆分讲清楚。
一个近百字段、联动复杂的商品表单,最先暴露的问题往往不是字段多,而是“万能输入框”已经失控。这里从 800 行 `AppInput` 出发,把表单组件该怎么拆重新讲清。
动态表单的输入框打字没反应,换成 this.$set 就好了——修好之后我不甘心,把 Vue 2 的 observer 源码翻了一个周末。Object.defineProperty、依赖收集、数组方法拦截、nextTick,这篇是我的读源码笔记。
过渡动画的价值不在“更花一点”,而在让状态变化更可感知。这里从弹窗、侧滑面板、列表增删和状态切换几个场景出发,把 `<transition>` 和 `<transition-group>` 的边界讲清。