本文档概述了 Airbnb React/JSX 风格指南,这是一套用于开发 React 应用程序的全面最佳实践和约定。它涵盖了组件结构、命名约定、JSX 格式化、props 管理、组件生命周期组织以及其他 React 特定的模式。对于非 React 特定的 JavaScript 风格指南,请参阅 JavaScript 风格指南。
React/JSX 风格指南既是开发人员的参考文档,也是 Airbnb JavaScript 代码库中通过 ESLint 配置实现自动化样式强制执行的基础。
React/JSX 风格指南与 ESLint 配置协同工作,以在 React 应用程序中强制执行一致的代码风格。
图示:React 风格指南实现
来源:packages/eslint-config-airbnb/rules/react.js1-620 react/README.md1-757
风格指南根据组件的目的和行为,为何时使用不同类型的 React 组件建立了清晰的模式。
图示:React 组件决策流程
来源:react/README.md34-74 react/README.md657-730
根据功能选择组件类型
| 组件类型 | 何时使用 | 示例 |
|---|---|---|
| 类组件 (Class Component) | 当需要 state 或 refs 时 | class MyComponent extends React.Component |
| 函数组件 (Function Component) | 用于无状态组件 | function MyComponent(props) { return <div>{props.text}</div>; } |
| 高阶组件 (HOC - Higher Order Component) | 用于组件组合和复用 | function withData(WrappedComponent) { ... } |
风格指南明确不鼓励使用
React.createClass 模式 (已弃用)来源:react/README.md34-74 react/README.md76-80
ComponentName.jsx // Component file
index.jsx // Root component of a directory
ReservationCard.jsxconst reservationItem = <ReservationCard />displayName,其中包含两个组件名称:withFoo(WrappedComponent)index.jsx 并通过目录名导入来源:react/README.md83-155 packages/eslint-config-airbnb/rules/react.js329
风格指南为 JSX 格式化提供了明确的规则
| 格式化规则 | 示例 |
|---|---|
| 多行 props 对齐 | Props 应在新行开始,并保持一致的缩进 |
| 闭合括号位置 | 多行组件的行对齐 |
| 自闭合标签 | 没有子组件时必需 |
| JSX 中的空格 | 花括号内不留空格,自闭合标签前留空格 |
| JSX 缩进 | 2 个空格,与整体代码风格一致 |
| 括号 | 多行 JSX 周围必需 |
来源:react/README.md173-237 packages/eslint-config-airbnb/rules/react.js76-82 packages/eslint-config-airbnb/rules/react.js85-86 packages/eslint-config-airbnb/rules/react.js380-385
")')<Foo bar={baz} />来源:react/README.md240-258 packages/eslint-config-airbnb/rules/react.js25-26
true 时省略值:<Input disabled /> (而不是 disabled={true})defaultPropspropTypes 验证 propsProps 组织示例
来源:react/README.md290-467 react/README.md227-232 packages/eslint-config-airbnb/rules/react.js397-401
来源:react/README.md431-482 packages/eslint-config-airbnb/rules/react.js502-508
语义化命名事件处理器
handle 前缀on 前缀在构造函数中绑定事件处理器,而不是在 render 方法中
来源:react/README.md555-616 packages/eslint-config-airbnb/rules/react.js89-93
风格指南规定了类组件方法推荐的顺序
render())ESLint 通过 react/sort-comp 规则强制执行此顺序,该规则定义了特定的分组及其顺序
order: [
'static-variables',
'static-methods',
'instance-variables',
'lifecycle',
'/^handle.+$/',
'/^on.+$/',
'getters',
'setters',
'instance-methods',
'everything-else',
'rendering',
]
来源: react/README.md657-705 packages/eslint-config-airbnb/rules/react.js249-296
风格指南包含几项以可访问性为中心的建议
<img> 标签中包含 alt 属性accessKeykey prop来源: react/README.md325-376 packages/eslint-config-airbnb/rules/react.js394-395
风格指南通过许多 ESLint 规则强制执行。其中一些最重要的包括
| 规则 | 目的 | 设置 |
|---|---|---|
react/jsx-filename-extension | 强制 JSX 使用 .jsx 文件 | 只允许在 .jsx 文件中使用 |
react/jsx-no-bind | 防止在 JSX 属性中使用 .bind() | 错误(有例外) |
react/destructuring-assignment | 强制 props/state 解构 | 始终必需 |
react/no-array-index-key | 防止使用索引作为 key | 错误 |
react/prefer-stateless-function | 鼓励函数组件 | 错误(PureComponents 除外) |
react/prop-types | 需要 prop 类型验证 | 错误 |
react/sort-comp | 强制组件方法排序 | 详细配置的错误 |
react/jsx-props-no-spreading | 控制 props 展开 | HTML 元素的错误 |
来源: packages/eslint-config-airbnb/rules/react.js108-116 packages/eslint-config-airbnb/rules/react.js227-233 packages/eslint-config-airbnb/rules/react.js394-395 packages/eslint-config-airbnb/rules/react.js446-447 packages/eslint-config-airbnb/rules/react.js502-508
Airbnb React/JSX 风格指南为开发 React 应用程序提供了全面的指导,以实现一致、可维护的模式。它涵盖了从组件声明到 props 管理再到可访问性考虑的方方面面。
这些约定通过 eslint-config-airbnb 的 React 规则集强制执行,使团队能够自动验证代码是否符合这些标准。该风格指南是更大的 Airbnb JavaScript 风格指南系统的重要组成部分,为核心 JavaScript 指南提供了 React 特定的扩展。
来源: react/README.md1-757 packages/eslint-config-airbnb/rules/react.js1-620