面试题:React 中有几种构建组件的方式?它们的区别是什么?

在 React 中,构建组件主要有三种方式,随着 React 版本的演进,推荐的方式也在不断变化。以下是当前主流的组件构建方式及其区别:


1. 函数组件 (Function Components)

定义:使用 JavaScript 函数来定义组件。函数接收 props 作为参数,并返回要渲染的 React 元素(JSX)。

语法

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

// 或使用箭头函数
const Welcome = (props) => <h1>Hello, {props.name}</h1>;

特点

  • 简洁:语法简单,代码量少。
  • 无状态(早期):在 React 16.8 之前,函数组件只能接收 props,无法管理自己的状态或使用生命周期方法,因此被称为“无状态组件”或“纯组件”。
  • 现代(使用 Hooks):自 React 16.8 引入 Hooks 后,函数组件可以使用 useState, useEffect 等 Hooks 来管理状态和副作用,功能上等同于类组件。
  • 性能:通常比类组件更轻量,React 团队也更优化函数组件。

适用场景现代 React 开发的首选方式,适用于绝大多数场景,特别是结合 Hooks 后。


2. 类组件 (Class Components)

定义:使用 ES6 的 class 语法,继承 React.Component 来定义组件。

语法

class Welcome extends React.Component {
  constructor(props) {
    super(props);
    // 初始化 state
    this.state = { name: props.name };
  }

  // 生命周期方法
  componentDidMount() {
    console.log('Component mounted');
  }

  render() {
    return <h1>Hello, {this.state.name}</h1>;
  }
}

特点

  • 功能完整:可以管理 state,使用完整的生命周期方法(如 componentDidMount, componentDidUpdate, componentWillUnmount)。
  • this 上下文:需要处理 this 的绑定问题(如事件处理器)。
  • 代码量多:相比函数组件,需要更多的样板代码(boilerplate code)。
  • 继承:基于类的继承机制。

适用场景

  • 旧项目或需要兼容旧代码。
  • 某些非常复杂的场景(虽然 Hooks 已能覆盖绝大多数)。
  • 注意:React 官方并未弃用类组件,但新项目强烈推荐使用函数组件 + Hooks

3. React.createClass (已废弃)

定义:React 早期(v15.5 之前)提供的工厂函数方式来创建组件。

语法

const Welcome = React.createClass({
  propTypes: {
    name: React.PropTypes.string
  },
  getDefaultProps() {
    return { name: 'Guest' };
  },
  getInitialState() {
    return { count: 0 };
  },
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
});

特点

  • 自动绑定 this:方法会自动绑定到组件实例,无需手动 bind
  • Mixin 支持:支持 mixins 实现代码复用(但已被证明是反模式)。
  • 已废弃:从 React v15.5 开始被标记为废弃,建议迁移到 ES6 类。现在需要通过 create-react-class 包来使用。

适用场景不应在新项目中使用,仅用于维护旧代码。


主要区别对比

特性函数组件 (现代)类组件React.createClass
语法函数ES6 class工厂函数
状态管理通过 useState Hook通过 this.statesetState通过 getInitialState
生命周期通过 useEffect 等 Hook通过 componentDidMount 等方法通过 componentDidMount 等方法
this 绑定this 问题(箭头函数或 Hooks)需手动绑定事件处理器自动绑定
代码简洁性✅ 非常简洁❌ 样板代码多⚠️ 中等
逻辑复用Hooks (推荐)高阶组件 (HOC), Render PropsMixins (反模式)
当前推荐度✅✅✅ 首选⚠️ 可用,但非首选已废弃

总结

  1. React.createClass已废弃,不应在新项目中使用。
  2. 类组件:功能完整,但在新项目中不推荐作为首选,主要用于维护旧代码。
  3. 函数组件 + Hooks现代 React 的标准和推荐方式。它结合了函数的简洁性和 Hooks 提供的强大状态与副作用管理能力,是当前和未来的主流。

最佳实践:在新项目中,始终优先使用函数组件和 Hooks 来构建你的 React 应用。

THE END
喜欢就支持一下吧
点赞10 分享