返回

React 中的组件类型:Dumb 组件 vs Smart 组件

前端

在 React 中,组件(Component)是构成应用的基本单元,负责显示数据并响应用户操作。React 中的组件主要分为两种类型:Dumb 组件和 Smart 组件,每种组件都有各自的特点和使用场景。

Dumb 组件与 Smart 组件的区别

Dumb 组件

  • Dumb 组件又称为 Presentational Component,是一种无状态组件,没有任何业务逻辑。
  • Dumb 组件只负责渲染数据,不包含任何状态或行为。
  • Dumb 组件通常很小,易于维护和测试。

Smart 组件

  • Smart 组件又称为 Container Component,是一种有状态组件,包含业务逻辑。
  • Smart 组件负责获取和处理数据,并根据数据状态决定如何渲染 Dumb 组件。
  • Smart 组件通常较大,维护和测试也更为复杂。

何时使用 Dumb 组件和 Smart 组件

  • 使用 Dumb 组件:
    • 当您需要渲染数据时。
    • 当您需要创建一个简单的、可重用的组件时。
    • 当您需要创建一个易于维护和测试的组件时。
  • 使用 Smart 组件:
    • 当您需要处理业务逻辑时。
    • 当您需要获取和处理数据时。
    • 当您需要根据数据状态决定如何渲染 Dumb 组件时。

举个例子

为了更好地理解 Dumb 组件和 Smart 组件的区别,我们来看一个简单的例子。假设我们正在构建一个待办事项应用。

Dumb 组件:

const TodoItem = (props) => {
  return (
    <li>
      {props.todo.text}
      <button onClick={() => props.onToggleTodo(props.todo)}>Toggle</button>
      <button onClick={() => props.onDeleteTodo(props.todo)}>Delete</button>
    </li>
  );
};

在这个 Dumb 组件中,我们只负责渲染待办事项的文本以及两个按钮。我们没有处理任何业务逻辑,如添加、删除或切换待办事项。

Smart 组件:

class TodoList extends React.Component {
  state = {
    todos: [
      {
        id: 1,
        text: "Learn React",
        completed: false,
      },
      {
        id: 2,
        text: "Build a React app",
        completed: false,
      },
      {
        id: 3,
        text: "Deploy a React app",
        completed: false,
      },
    ],
  };

  addTodo = (text) => {
    this.setState({
      todos: [...this.state.todos, { id: Date.now(), text, completed: false }],
    });
  };

  toggleTodo = (todo) => {
    this.setState({
      todos: this.state.todos.map((t) => (t.id === todo.id ? { ...t, completed: !t.completed } : t)),
    });
  };

  deleteTodo = (todo) => {
    this.setState({
      todos: this.state.todos.filter((t) => t.id !== todo.id),
    });
  };

  render() {
    return (
      <ul>
        {this.state.todos.map((todo) => (
          <TodoItem todo={todo} onToggleTodo={this.toggleTodo} onDeleteTodo={this.deleteTodo} />
        ))}
      </ul>
    );
  }
}

在这个 Smart 组件中,我们处理了所有与待办事项相关的业务逻辑,如添加、删除和切换待办事项。我们还维护了待办事项的状态。

总结

  • Dumb 组件和 Smart 组件是 React 中两种不同的组件类型,各有其特点和使用场景。
  • Dumb 组件只负责渲染数据,不包含任何状态或行为。
  • Smart 组件负责处理业务逻辑,获取和处理数据,并根据数据状态决定如何渲染 Dumb 组件。
  • 在实践中,我们通常将 Dumb 组件和 Smart 组件结合起来使用,以构建出功能强大、易于维护的 React 应用。