--- title: 前端用户界面问题备忘单 description: 在前端/网络开发人员面试时,改善你必须建立的用户界面的顶级技巧 - 代码结构、管理状态、可访问性等。 --- 以下是一些提示,可帮助您在前端/ Web 开发人员面试期间改善您必须构建/设计的用户界面。 这些提示可应用于[用户界面编码面试](/front-end-interview-guidebook/user-interface)和[前端系统设计面试](/system-design/types-of-questions)。 ## 概览 - **分解问题**:将问题分解为可以逐步构建的阶段/里程碑,并逐步编写您的代码。 - **经常测试**:完成每个功能后在浏览器中测试 UI,以便您可以尽早捕获漏洞。 较早捕获的错误更容易修复。 确保当前功能正常工作,然后再进行下一个功能。 - **使用 JavaScript 框架(如果可能)**: 如果您选择使用纯 JavaScript 构建复杂的 UI,您的生活将非常艰难,因为代码可能会很快变得非常长而杂乱。 我们建议使用框架构建应用程序和游戏。 - **未雨绸缪,计划周全**:考虑一下您的面试官可能要求您添加下一个功能。 设计代码的方式,使新功能可以轻松添加。 ## 组件组织 您如何构建代码? - **采用容器/表示模式**:为了实现良好的解耦合,渲染代码应该与数据源无关。 将组件分成提供数据的外部组件和根据数据呈现视图的内部无状态组件。 这使视图可以从本地组件/应用状态切换到从网络加载的数据等情况,反之亦然,只要更改外部组件,内部组件就可以按原样使用。 - **将应用程序分解为子组件**: 如果 UI 具有多个部分,请将 UI 分解为较小的组件,并确定每个组件需要的属性/状态。 - **最小 API 面积**: 不要将不需要的额外数据传递给内部组件。 - **组件实例化**: 在要求构建 UI 组件时,定义 API(通常是函数)以允许创建多个独立的组件实例,其中包括可配置的选项和默认值。 避免编写代码(例如依赖全局变量)以防止创建单独的 UI 组件实例。 - **纯 JavaScript**:创建一个接受 DOM 元素(容器元素)和选项对象的函数。 在函数内部,您可以动态创建 DOM 元素并将其附加到容器元素。 组件 API 的另一个灵感来源是[jQuery UI](https://jqueryui.com),但它依赖于 jQuery。 - **其他 JavaScript UI 框架**:大多数现代 JavaScript UI 框架(如 React)默认强制您按组件进行思考。 ## 状态设计 状态是您的 UI 中随时间而变化的数据,通常是由用户交互或后台事件(网络请求响应、时间流逝、WebSocket 事件)导致的。 面试中的大多数 UI 问题都需要状态,因此设计状态非常重要。 - **确定 UI 中所需的最小状态**: 状态越小,代码的可读性和理解能力就越强 -> 减少错误的可能性。 - 识别必要状态和派生状态。 派生状态是可以从必要状态计算出的状态。 - **将呈现代码与数据管理代码分开**: 将 UI 作为数据的功能并将代码分为两组(呈现代码和数据管理代码),以获得更好的可读性。 如果使用诸如 React 之类的 JavaScript 框架,则一般强制执行此操作。 - **对于复杂的状态交互,请使用状态-减少器模式**: 如果问题需要许多状态字段,并且某些操作需要同时更改多个字段,请使用[减少器来汇总状态更新逻辑](https://beta.reactjs.org/learn/extracting-state-logic-into-a-reducer)。 由 Redux 首先推广,状态-减少器模式鼓励您确定 UI 的状态、可执行的操作以及如何将操作与状态结合以导出下一个状态。 如果您使用 React,则可以通过[`useReducer` React hook](https://reactjs.org/docs/hooks-reference.html#usereducer)实现此模式。 Redux 通常过于适用于面试,而`useReducer`应该足够。 React 的文档["管理状态"](https://beta.reactjs.org/learn/managing-state)是有关如何正确设计和使用组件状态的杰出资源。 提到的一些想法与 React 无关,可以适用于任何 UI 框架。 ## JavaScript 您的 JavaScript 是否使用现代语言语法和优秀实践,同时避免不良实践? - **使用样式指南**:使用 JavaScript 样式指南,如[Airbnb 的 JavaScript 样式指南](https://github.com/airbnb/javascript)。 在开发过程中,静态分析工具如[ESLint](https://eslint.org)可以帮助您执行其中一些良好实践。 但是,在面试期间可能没有这些工具可用。 尝试适应使用良好编码风格编写代码,而不需要工具的帮助。 - **不要触碰全局环境**:这适用于 Vanilla JavaScript 场景。 避免声明全局变量和全局函数以污染全局范围。 编写立即调用的函数表达式(IIFE)并将所有自定义代码放在其中。 ## HTML 您是否使用正确的属性编写语义化的 HTML? - **语义标签**: 为标题使用标题标签,为交互元素使用按钮标签,为连续元素使用列表标签等。 不要为所有内容使用`
`! - **标题层次**: 确保标题标签具有层次结构,并且 DOM 中没有多个`

`。 - **交互元素**: 使用`