本文档详细介绍了根据 Airbnb JavaScript 风格指南,React 组件推荐的结构和组织模式。它涵盖了组件声明模式、生命周期方法排序、内部组件组织以及相关的最佳实践。有关 props、state 和事件处理的特定信息,请参阅 Props、State 和事件。
Airbnb 的风格指南为 React 组件的声明方式定义了清晰的模式,并提供了何时使用每种模式的具体指导。
首选的组件声明模式是
| 组件类型 | 何时使用 | 声明模式 |
|---|---|---|
| 类组件 | 当需要 state、refs 或生命周期方法时 | class Component extends React.Component |
| 函数组件 | 当组件无状态/展示性时 | 常规命名函数(非箭头函数) |
关键规则
React.createClass每个 React 组件都应放在自己的文件中,并遵循以下约定:
.jsx 扩展名ReservationCard.jsx)index.jsx 作为文件名,并使用目录名作为组件名Airbnb 风格指南强制要求在 React 组件内对方法进行特定的排序,以确保一致性和可读性。
ESLint 规则 react/sort-comp 强制在类组件中执行以下方法排序:
constructorgetChildContextgetDerivedStateFromPropscomponentWillMount / UNSAFE_componentWillMountcomponentDidMountcomponentWillReceiveProps / UNSAFE_componentWillReceivePropsshouldComponentUpdatecomponentWillUpdate / UNSAFE_componentWillUpdategetSnapshotBeforeUpdatecomponentDidUpdatecomponentDidCatchcomponentWillUnmounthandle* 开头的方法on* 开头的方法render 的 getter 方法renderNavigation)render 方法来源:packages/eslint-config-airbnb/rules/react.js247-297 react/README.md657-676
遵循 Airbnb 风格指南的结构良好的 React 类组件看起来是这样的:
对于类组件,风格指南建议将 propTypes 和 defaultProps 声明为类的静态属性,或在定义后作为类本身的属性。
React.createElement对于 HOC(高阶组件),请使用 HOC 和被包装组件的复合名称。
withHOC(WrappedComponent)displayName 以反映此模式。Airbnb ESLint 配置强制执行多项与组件结构相关的规则。
| ESLint 规则 | 描述 |
|---|---|
react/prefer-es6-class | 强制使用 ES6 类组件,而不是 createClass |
react/prefer-stateless-function | 鼓励在可能的情况下使用无状态函数 |
react/no-multi-comp | 防止一个文件定义多个组件(有例外) |
react/sort-comp | 强制执行组件方法排序 |
react/require-render-return | 确保 render 方法返回值 |
react/no-unused-state | 防止未使用状态声明 |
react/state-in-constructor | 控制状态初始化位置 |
来源:packages/eslint-config-airbnb/rules/react.js220-221 packages/eslint-config-airbnb/rules/react.js224-225 packages/eslint-config-airbnb/rules/react.js249-297
状态应在 constructor 中初始化。
Airbnb 风格指南目前要求在 constructor 中初始化状态,尽管 ESLint 配置中的注释表明,一旦完全支持类属性语法,未来将优先使用该语法。
来源:packages/eslint-config-airbnb/rules/react.js492-494
根据 Airbnb JavaScript 风格指南的 React 组件结构侧重于一致性、可读性和可维护性。关键方面包括:
遵循这些指南可确保 React 组件在大代码库和团队中保持可维护性。