Vue 高频追问 Q&A
A: 拦截能力更完整,性能和可维护性更好。(深入阅读:Proxy 替代 Object.defineProperty)
Vue 高频追问 Q&A
1. Q: 为什么 Vue3 要用 Proxy?
A: 拦截能力更完整,性能和可维护性更好。(深入阅读:Proxy 替代 Object.defineProperty)
2. Q: computed 和 watch 区别?
A: computed 偏派生值,watch 偏副作用监听。(深入阅读:computed、watch 与 watchEffect)
3. Q: v-if 和 v-show 怎么选?
A: 频繁切换用 v-show,条件少变更用 v-if。(深入阅读:v-if、v-show 与条件渲染)
4. Q: nextTick 解决什么问题?
A: 在 DOM 更新完成后执行回调。(深入阅读:nextTick 与异步更新队列)
5. Q: Vue 性能优化常见手段?
A: 组件拆分、缓存计算、按需加载、合理 key。(深入阅读:Vue 性能原则与渲染优化)
6. Q: 为什么组件的 data 必须是函数?
A: 每次创建组件实例时返回独立对象,避免多个实例共享同一份响应式状态。更多 Vue2 源码和场景见 Vue 面试真题补充。(深入阅读:组件 data 的实例隔离)
7. Q: key 应该怎么选?
A: 选择稳定且能代表业务身份的唯一值;插入、删除或排序时不要用数组索引,更不能使用随机数。(深入阅读:key、VNode 与列表更新)
8. Q: keep-alive 缓存后会触发哪些生命周期?
A: 切换缓存组件时触发 activated/deactivated,不等同于 mounted/destroyed;请求和轮询要按这组生命周期清理。(深入阅读:keep-alive 的缓存与生命周期)
9. Q: history 路由刷新为什么会 404?
A: 服务端把前端路径当成真实文件查找了,需要将未知路径回退到 index.html;hash 模式则不依赖这项重写。(深入阅读:Vue Router history 模式与部署)
10. Q: 多个请求同时返回 401,如何刷新 Token?
A: 用一个共享的刷新 Promise 保证只有一次刷新请求,其余请求等待它;刷新成功后给原配置写入新 Token 并重放一次,失败则统一清理会话。对创建、支付等写请求,重放前还必须有服务端幂等键,不能把“请求取消”当成回滚。(深入阅读:并发 401、Token 刷新与请求重放)
11. Q: 如何防止用户重复提交表单?
A: UI 层锁定提交状态并复用在途请求;服务端用一次操作一个 Idempotency-Key,结合唯一约束或事务保存结果。重试要复用同一 key,不能每次生成新 key。(深入阅读:重复提交与服务端幂等)
12. Q: qiankun 子应用卸载后为什么还会影响主应用?
A: 沙箱不能替代对 document、body 事件、定时器、Observer、WebSocket 和第三方订阅的清理。子应用应在 unmount 中执行集中保存的 disposer;静态资源则通过运行时 public path 或稳定资源前缀解析,避免全局劫持 DOM 方法。(深入阅读:qiankun 的资源、沙箱与卸载清理)