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,类组件只用来维护老项目。

相关推荐
卸任3 小时前
Vibe coding工具使用心得
前端·ai编程
brien93 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance4 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M4 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写4 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李4 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易4 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
清晨Coding4 小时前
删了 Cookie 还能自动登录?Google系网站登录态自动恢复的原理分析
javascript
风骏时光牛马4 小时前
前沿视界
前端
kyriewen4 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员