Skip to content

高级资深前端面试题 · Vue 组件化开发与设计

如何在 Vue 组件库中系统性实现可访问性?

这道题不只考 API 记忆,还考察你能否把 Vue3 的设计思想、运行机制、工程边界和团队落地连接起来。

适合阶段:高级 / 资深前端 · 二面到架构面核心能力:组件契约 · 设计系统 · 工程治理

面试官想考什么

  • 你能否先定义问题边界?
    考察是否知道这项能力解决什么问题,以及它不负责什么。
  • 你能否解释 Vue3 的机制或设计取舍?
    考察能否从组件、编译器、运行时、浏览器和工程系统多个层面建立因果链。
  • 你能否把方案落到大型项目?
    考察可维护性、可扩展性、性能、类型、测试、兼容和发布治理意识。
  • 遇到复杂边界或线上故障怎么办?
    考察是否能设计降级、观测、回滚和验证闭环,而不是只给理想路径。

一句话回答

text
可访问性要从语义 HTML、键盘交互、焦点管理、ARIA 状态、颜色对比度和自动化测试共同保证,而不是给组件加几个 aria 属性。

面试回答详解

这道题的高级回答重点是把概念放回工程上下文:先说它解决的问题,再解释关键机制,最后说明适用边界、失败模式和验证方法。

1. 语义优先\n\n能用 button、label、input、dialog、ul/li 等原生语义解决的问题,不要用 div 加 click 重新发明交互。\n\n### 2. 焦点管理\n\nDialog、Menu、Combobox、Tabs 等组件要定义焦点进入、移动、退出和销毁后的回收策略。\n\n### 3. 状态同步\n\naria-expanded、aria-selected、aria-disabled、aria-controls 等状态必须和真实交互状态同步,不能只写静态字符串。\n\n### 4. 质量验证\n\n键盘测试、屏幕阅读器抽查、axe 等自动化检测、对比度检测和真实用户反馈要纳入组件库 CI。

可直接背诵的 30 秒回答

text
我会从原生语义出发设计组件,再补键盘和焦点模型、动态 ARIA 状态、对比度和自动化检查;可访问性是组件行为契约,不是最后追加的属性。

扩展知识

从概念到工程

text
稳定契约 -> 明确状态边界 -> 可组合实现 -> 可观测验证 -> 兼容演进

常见误区

  • 把 Vue 的语法糖当成完整的架构方案。
  • 只讨论正常路径,不讨论异步、卸载、失败、SSR 或大数据量。
  • 只看局部性能,不看调用方复杂度、测试成本和升级成本。
  • 用内部实现细节作为公共契约,导致后续重构困难。

面试官追问链

追问一:为什么只加 aria-label 不够?\n\n- 考察点:面试官想确认你是否掌握这个方案的边界。\n- 回答方向:ARIA 不能补救错误的交互模型和焦点流,语义、键盘、状态和焦点必须整体设计。\n\n### 追问二:如何测试焦点回收?\n\n- 考察点:面试官想确认你是否掌握这个方案的边界。\n- 回答方向:记录打开前 activeElement,关闭后验证焦点回到合理目标,并覆盖组件被卸载的异常路径。\n\n### 追问三:无障碍会不会影响开发效率?\n\n- 考察点:面试官想确认你是否掌握这个方案的边界。\n- 回答方向:早期约束会减少后期返工;组件库把行为沉淀后,业务开发反而更快。

推荐阅读

基于 MIT 协议开源