Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 函数组件与类组件

函数组件与类组件

在React中,组件是构建用户界面的核心单元。组件可以分为两种类型:函数组件和类组件。随着React的发展,函数组件因其简洁性和对Hooks的支持,逐渐成为开发者的首选。然而,类组件在需要复杂逻辑时仍然有其应用场景。

本章节将详细介绍函数组件与类组件的特性、语法和区别。


1. 函数组件

函数组件是通过定义普通的JavaScript函数来实现的。它接收一个props对象作为参数,并返回一个React元素来描述UI。

1.1 定义函数组件

函数组件的基本结构如下:

function ComponentName(props) {
  return <div>Hello, {props.name}!</div>;
}

示例:

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

// 使用函数组件
const element = <Welcome name="John" />;

1.2 函数组件的特点

无状态:早期的函数组件无法管理状态,仅用于渲染UI。但React Hooks的引入改变了这一点。 简洁:函数组件更直观,语法更简单。 性能:函数组件通常比类组件性能更高,因为它们没有组件实例。

2. 类组件

类组件是通过定义一个继承自React.Component的类来实现的。类组件具有更多的功能,例如状态管理和生命周期方法。

2.1 定义类组件

类组件的基本结构如下:

class ComponentName extends React.Component {
  render() {
    return <div>Hello, {this.props.name}!</div>;
  }
}

示例:

class Welcome extends React.Component {
  render() {
    return <h1>Welcome, {this.props.name}!</h1>;
  }
}

// 使用类组件
const element = <Welcome name="John" />;

2.2 类组件的特点

  • 有状态:类组件可以通过state管理组件内部状态。
  • 生命周期方法:类组件提供了多种生命周期方法,便于开发者管理组件的挂载、更新和卸载过程。
  • 复杂性:类组件语法相对冗长,不如函数组件简洁。

3. 函数组件与类组件的对比

特性函数组件类组件
定义方式普通JavaScript函数继承自React.Component的类
状态管理通过React Hooks(如useState)通过this.state和setState
生命周期方法使用useEffect使用生命周期方法(如componentDidMount)
性能较高,因为不需要实例化较低,需要实例化组件
代码简洁性更简洁直观代码相对冗长

4.使用Hooks的函数组件

  React 16.8引入了Hooks,为函数组件提供了状态管理和副作用处理能力,使其功能接近类组件。

4.1 使用useState管理状态

import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

4.2 使用useEffect处理副作用

import React, { useState, useEffect } from 'react';

function Timer() {
  const [seconds, setSeconds] = useState(0);

  useEffect(() => {
    const interval = setInterval(() => setSeconds(prev => prev + 1), 1000);

    return () => clearInterval(interval); // 清理副作用
  }, []);

  return <p>Timer: {seconds} seconds</p>;
}

5. 类组件的状态与生命周期

5.1 管理状态

类组件通过state属性管理状态,并使用setState更新状态。

class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = { count: 0 };
  }

  increment = () => {
    this.setState({ count: this.state.count + 1 });
  };

  render() {
    return (
      <div>
        <p>Count: {this.state.count}</p>
        <button onClick={this.increment}>Increment</button>
      </div>
    );
  }
}

5.2 生命周期方法

类组件提供了多种生命周期方法:

  • 挂载阶段:componentDidMount(组件挂载完成后执行)
  • 更新阶段:componentDidUpdate(组件更新后执行)
  • 卸载阶段:componentWillUnmount(组件销毁前执行) 示例:
class Timer extends React.Component {
  constructor(props) {
    super(props);
    this.state = { seconds: 0 };
  }

  componentDidMount() {
    this.interval = setInterval(() => {
      this.setState({ seconds: this.state.seconds + 1 });
    }, 1000);
  }

  componentWillUnmount() {
    clearInterval(this.interval);
  }

  render() {
    return <p>Timer: {this.state.seconds} seconds</p>;
  }
}

6. 选择函数组件还是类组件?

  • 推荐使用函数组件:随着Hooks的引入,函数组件可以实现类组件的所有功能,并且代码更简洁、可读性更高。
  • 类组件的场景:在维护旧代码或需要传统生命周期方法时,类组件仍然有一定的应用场景。

7. 小结

  • 函数组件:通过函数定义,语法简洁,推荐用于大多数场景,尤其是使用Hooks后。
  • 类组件:通过类定义,适用于需要复杂状态管理和生命周期方法的场景。
  • 推荐:优先使用函数组件,除非需要维护旧代码或特定功能需要类组件支持。

掌握函数组件和类组件的使用,有助于根据实际需求选择适合的开发方式。

Last Updated:: 12/4/24, 12:02 PM