React类组件和函数组件的所有核心区别

一句话总结论

React 16 类组件:老写法,用 class、this、生命周期。
React 18 函数组件:新写法,用 Hooks,无 this,更简洁、性能更好。


一、最核心区别(必背)

对比 React 16 类组件 React 18 函数组件(Hooks)
写法 class extends Component function + Hooks
this 必须用 this 完全没有 this
状态 this.state / this.setState useState
生命周期 componentDidMount useEffect 一统天下
逻辑复用 mixins / HOC / renderProps 自定义 Hooks
代码量 多、臃肿 少、简洁
并发渲染 不支持 完美支持
性能 一般 更好

二、代码直接对比(一看就懂)

1. 定义组件

类组件(React 16)

jsx 复制代码
import React from 'react'
class App extends React.Component {
  render() {
    return <div>hello</div>
  }
}

函数组件(React 18)

jsx 复制代码
import React from 'react'
function App() {
  return <div>hello</div>
}

2. 状态(数据)

类组件

jsx 复制代码
state = { count: 0 }

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

函数组件

jsx 复制代码
import { useState } from 'react'
const [count, setCount] = useState(0)

const add = () => setCount(count + 1)

3. 发起请求(挂载时)

类组件(生命周期)

jsx 复制代码
componentDidMount() {
  fetch('/api').then(res => res.json())
}

函数组件(useEffect)

jsx 复制代码
useEffect(() => {
  fetch('/api').then(res => res.json())
}, [])

4. 监听数据变化

类组件

jsx 复制代码
componentDidUpdate(prevProps) {
  if (prevProps.count !== this.props.count) {
    // 变化了
  }
}

函数组件

jsx 复制代码
useEffect(() => {
  // 变化了
}, [count])

三、生命周期 VS Hooks(超级重要)

类组件的生命周期,全部可以被 useEffect 替代

类组件生命周期 函数组件 Hooks
constructor useState
componentDidMount useEffect(..., [])
componentDidUpdate useEffect(..., [依赖])
componentWillUnmount useEffect 返回清理函数
shouldComponentUpdate React.memo

一句话:
一个 useEffect 搞定类组件所有生命周期!


四、逻辑复用方式(天差地别)

类组件

只能用:

  • 高阶组件 HOC
  • render props
  • mixins(废弃)

→ 代码嵌套多,嵌套地狱

函数组件

自定义 Hooks

jsx 复制代码
function useCount() {
  const [count, setCount] = useState(0)
  return [count, setCount]
}

→ 干净、简洁、无嵌套、复用极强


五、性能与架构(React 18 关键)

类组件

  • 不支持 并发渲染
  • 不支持 自动批处理
  • 无法优化逻辑
  • this 容易出错

函数组件(React 18)

  • 支持 并发渲染(页面不卡顿)
  • 支持 自动批处理(性能暴涨)
  • 支持 Suspense、useTransition
  • 无 this,无生命周期混乱

六、最简单总结(面试必背)

类组件(React 16)

  • 老技术
  • this
  • 生命周期繁多
  • 逻辑复用难
  • 不支持新特性

函数组件(React 18)

  • 现代 React 标准
  • this
  • 用 Hooks 替代一切
  • 逻辑复用简单
  • 支持所有新特性
  • 代码少、易维护、性能高

终极一句话

现在 React 开发,全部用函数组件+Hooks,类组件只用来维护老项目。

相关推荐
nujnewnehc1 天前
ps, ai, ae插件都可以用html和js开发了
前端·javascript
Jagger_1 天前
整洁架构三连问:是什么,怎么做,为什么要用
前端
一个处女座的程序猿O(∩_∩)O1 天前
React 完全入门指南:从基础概念到组件协作
前端·react.js·前端框架
前端摸鱼匠1 天前
Vue 3 的defineEmits编译器宏:详解<script setup>中defineEmits的使用
前端·javascript·vue.js·前端框架·ecmascript
里欧跑得慢1 天前
Flutter 测试全攻略:从单元测试到集成测试的完整实践
前端·css·flutter·web
Jagger_1 天前
前端整洁架构详解
前端
徐小夕1 天前
我花一天时间Vibe Coding的开源AI工具,一键检测你的电脑能跑哪些AI大模型
前端·javascript·github
英俊潇洒美少年1 天前
Vue3 企业级封装:useEventListener + 终极版 BaseEcharts 组件
前端·javascript·vue.js
嵌入式×边缘AI:打怪升级日志1 天前
使用JsonRPC实现前后台
前端·后端
小码哥_常1 天前
深度剖析:为什么Android选择了Binder
前端