# 1. defineModel 的多 v-model 绑定(defineModel('a')、defineModel('b')) A defineModel() 只能声明一个默认模型,不支持命名模型 B defineModel('a') 编译为 a prop 与 update:a emit,配合 v-model:a 使用 ✓ 正确答案 C defineModel 在运行时动态创建 prop,无需编译 D 使用 defineModel 后子组件无法修改绑定值
# 2. useTemplateRef() 与 useId() 在 SSR 与 Composition API 中的应用 A useTemplateRef() 返回的 ref 在服务端渲染时即可访问 DOM B useId() 基于组件树位置生成确定性 ID,避免 SSR 水合不一致 ✓ 正确答案 C useTemplateRef() 的声明名必须与模板 ref 绑定无关 D useId() 每次调用都返回随机值
# 3. Vue 3 Teleport 与 KeepAlive 在 Modal/Tabs 缓存的工程价值 A Teleport 会把组件逻辑与事件也传送到目标 DOM 下 B KeepAlive 只能用于组件,不能用于 router-view C Modal 使用 Teleport 后无法再使用 Transition 动画 D KeepAlive 缓存组件实例,切换时保留其内部状态 ✓ 正确答案
# 4. Vue 3.5 defineModel/useModel 的双向绑定在表单组件的现代取舍 A defineModel 会绕过 props,子组件可直接修改父组件状态 B useModel() 只能在 Options API 中使用 C defineModel 是 prop + emit 的语法糖,赋值本质是派发 update 事件 ✓ 正确答案 D 使用 defineModel 后组件无法再声明其他 props
# 5. defineSlots 与具名插槽的类型推导 A defineSlots 仅用于类型推导,编译后不产生运行时代码 ✓ 正确答案 B defineSlots 会在运行时生成插槽对象 C 作用域插槽的 props 无法用 defineSlots 声明类型 D defineSlots 与 defineEmits 功能完全相同
# 6. 组合式函数(composables)的复用模式与 use* 命名规范 A 以 use 开头命名是可组合函数的生态约定,且内部封装状态与清理逻辑 ✓ 正确答案 B 组合式函数应返回普通值以简化使用 C 组合式函数内部禁止使用 watch 与生命周期钩子 D composables 必须创建全局单例状态
# 7. defineProps/defineEmits/defineModel 的 props/emit/modelValue 类型安全 A defineEmits 只声明事件名,无法约束事件参数类型 B 类型声明只在运行时生效,不影响编译期检查 C defineModel 不能配置 type 与 required D defineProps/defineEmits/defineModel 共同构成组件进出数据与双向绑定的类型契约 ✓ 正确答案
# 8. 组件生命周期(onMounted/onUpdated/onUnmounted)与清理函数 A 生命周期钩子可以在异步回调中注册,只要函数名正确 B onMounted 后 DOM 已可用,适合初始化外部库与事件绑定 ✓ 正确答案 C onUpdated 中修改响应式状态不会引发任何问题 D onUnmounted 主要用于发送数据请求
# 9. Composition API 与 Options API 的场景与边界 A Options API 完全无法与 Composition API 共存 B Composition API 按功能组织代码,利于复用与类型推导;Options API 结构直观,适合简单组件 ✓ 正确答案 C Composition API 只适合组件库,业务项目必须用 Options API D mixins 与 composables 在复用机制上完全相同
# 10. Vue 3 编译器在静态提升 hoisting、PatchFlag、Block Tree 优化的工程价值 A 编译优化需要开发者手动开启才能生效 B 静态提升会在每次渲染时重新创建静态 VNode C Block Tree 仍需要递归遍历整棵虚拟 DOM 树 D PatchFlag 让 diff 时按标记精确比较动态部分,跳过静态内容 ✓ 正确答案
# 11. <script setup> 与普通 <script> 的宏命令能力差异 A 编译宏可以在普通 <script> 中使用,只要导入 vue B <script setup> 编译进 setup 函数,顶层绑定自动暴露给模板 ✓ 正确答案 C <script setup> 中无法使用 defineExpose D 普通 <script> 每创建一个组件实例都会重新执行
# 12. Transition 与 TransitionGroup 在大型 Vue 项目的工程价值 A Transition 可以同时为列表整体添加移动动画 B TransitionGroup 的列表项必须提供 key,才能正确识别新增、移除与移动 ✓ 正确答案 C 使用 JS 钩子后 CSS 类名机制会被禁用 D 过渡动画与 KeepAlive 缓存无法共存
# 13. defineProps 解构(Vue 3.5+)的响应式保留与 prop 更新追踪的工程价值 A Vue 3.5+ 中 defineProps 解构出的变量在 props 更新时保持同步响应 ✓ 正确答案 B Vue 3.5+ 解构 props 后修改解构变量会直接改变父组件数据 C 3.5 的 props 解构是运行时实现的,编译产物与 3.4 相同 D 解构后的 props 变量无法在模板中使用
# 14. <KeepAlive> 的 include/exclude/max 在动态组件的缓存策略 A KeepAlive 默认缓存所有组件,max 无效 B 被 KeepAlive 缓存的组件卸载时会触发 onMounted C include/exclude 基于组件 name 匹配,max 按最久未访问策略淘汰缓存实例 ✓ 正确答案 D keep-alive 无法与 <component :is> 动态组件配合
# 15. defineExpose 与 useTemplateRef 跨组件实例的访问边界 A 父组件通过 ref 可以访问子组件 <script setup> 内的全部状态 B 子组件卸载后,父组件的模板引用会保留原实例对象 C useTemplateRef 只能获取 DOM 元素,无法获取组件实例 D defineExpose 显式定义子组件的公共 API,父组件仅能访问暴露内容 ✓ 正确答案
# 16. Vue 3.5 组合式 API(Composition API) A onWatcherCleanup() 在 watch 首次执行前调用注册的清理函数 B useId() 生成基于组件树位置的确定性 ID,服务端与客户端一致 ✓ 正确答案 C Vue 3.5 移除了 defineModel 等 3.4 能力 D useTemplateRef() 在服务端渲染时即可返回 DOM 元素
# 17. Vue 3.5 的 provide/inject 在跨层级组件通信的现代实践 A inject 只能注入普通值,无法注入响应式数据 B provide 的 key 只能是字符串,不能使用 Symbol C provide/inject 适合跨层级共享上下文数据,全局应用状态更宜用 Pinia ✓ 正确答案 D inject 必须在祖先组件中调用
# 18. Vue 3.5 的 Suspense 在异步组件加载的边界 A Suspense 只能配合路由懒加载,无法配合异步组件 B Suspense 自带错误处理能力,失败时自动渲染错误页 C Suspense 会等待子树内全部异步依赖完成后一次性切换到默认插槽 ✓ 正确答案 D Suspense 已完全稳定,生产环境无任何限制
# 19. Vue 3.5 的 Fragment 支持多根节点组件的工程价值 A 多根组件会把属性自动继承到所有根节点上 B Vue 3 将多根模板编译为 Fragment,属性继承需通过 $attrs 显式绑定 ✓ 正确答案 C Vue 3 组件仍然只能有一个根节点 D Fragment 会在 DOM 中生成真实的容器元素
# 20. Vue 3.5 的 KeepAlive 在路由缓存与组件复用的工程取舍 A 路由参数变化时 KeepAlive 会自动创建新的缓存单元 B KeepAlive 缓存的路由组件不会占用内存 C activated 钩子在组件首次挂载时不执行 D 路由级缓存通过 KeepAlive 包裹 router-view,并用 include/exclude 控制缓存范围 ✓ 正确答案
# 21. Vue 3.5 的 Transition 与 TransitionGroup 在动画编排的工程实践 A Transition 只能为单个元素提供动画,无法处理多个元素 B Transition 的 JS 钩子无法与第三方动画库协作 C appear 属性会让所有动画默认每次渲染都执行 D TransitionGroup 的 v-move 类配合 FLIP 技术实现列表项移动动画,项必须有 key ✓ 正确答案
# 22. Vue 3.5 的 defineOptions 在组件选项声明的现代实践 A defineOptions 用于声明 data 与 methods 等运行时选项 B defineOptions 可以在编译期声明 name、inheritAttrs 等组件选项 ✓ 正确答案 C 使用 defineOptions 后组件无法在 DevTools 中显示名称 D defineOptions 必须在普通 <script> 中调用
# 23. Vue 3.5 的自定义指令(v-custom)在组件复用与原生 DOM 的取舍 A 自定义指令适合封装"模板声明的 DOM 行为",复杂业务逻辑应优先用组件或 composable ✓ 正确答案 B 自定义指令无法接收参数与修饰符 C 指令的卸载钩子主要用于发送数据 D 指令只能在 Options API 中定义