当前位置: 首页 > news >正文

类为什么在前端框架用的越来越少了?

类(class)在前端框架里为什么越来越少用了?

这是一个非常真实的趋势,尤其在 React、Vue 3、Svelte 等现代前端框架的生态里,基于 class 的组件写法正在被逐渐边缘化,取而代之的是函数式组件 + Hooks(或 Composition API)。

下面是目前最核心的几条原因,按重要程度排序:

1. Hooks / Composition API 带来了更自然的代码组织方式

class 组件的问题在于:生命周期和状态逻辑是分散在不同方法里的,同一个功能的代码被切分成多个生命周期方法:

class UserProfile extends Component { state = { user: null, loading: true }; componentDidMount() { this.fetchUser(); } componentDidUpdate(prevProps) { if (prevProps.id !== this.props.id) { this.fetchUser(); } } fetchUser = async () => { ... } }

而用 Hooks / Composition API 后,逻辑可以按“功能”聚合

function UserProfile({ id }) { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { const fetchUser = async () => { setLoading(true); const data = await api.getUser(id); setUser(data); setLoading(false); }; fetchUser(); }, [id]); // 依赖变化自动重跑 // 所有和「获取用户」相关的逻辑都在一起 }

结论:Hooks 让“关注点分离”变成了“关注点聚合”,代码更直观、更容易复用。

2. class 的 this 绑定问题太痛苦

几乎每个前端开发者都踩过这些坑:

  • 忘记 bind → 点击事件 this 变成 undefined
  • 在 render 里写onClick={this.handleClick.bind(this)}→ 每次渲染都创建新函数
  • 用箭头函数解决 → 类里到处是箭头函数,代码看着别扭
  • constructor 里一堆 this.xxx = this.xxx.bind(this)

Hooks 彻底消灭了this的概念,从根源上解决了这个问题

3. 函数组件 + Hooks 性能更好(官方优化方向)

  • 函数组件本身更轻量(没有实例、没有 prototype 链)
  • React 官方从 16.8 开始把所有新特性都优先给函数组件(Suspense、Concurrent Mode、Server Components、use() 等)
  • class 组件的很多特性(如 getDerivedStateFromProps、componentDidCatch)在 Hooks 时代都有更好的替代方案

React 官方文档现在甚至把 class 组件放在“旧写法”章节,强烈推荐函数组件

4. 更好的 Tree Shaking 和打包体积

函数组件 + Hooks 更容易被 bundler(webpack、esbuild、rolldown、turbopack 等)做 tree-shaking。

class 组件因为有实例方法、生命周期、this 绑定等,很难被完全消除死代码。

5. 社区和生态已经全面转向函数式

  • 2020 年之后,几乎所有新库、新组件、新教程都默认用 Hooks
  • 大量经典库(如 react-query、zustand、swr、jotai、valtio、tanstack table 等)都是基于 Hooks 设计的
  • 用 class 写组件反而会显得“过时”,在团队协作中增加心智负担

6. Composition API / Signals 进一步加速了“无 class”趋势

Vue 3 的 Composition API、SolidJS 的 Signals、Svelte 的 runes、Angular 的新控制流 + inject(),都在往纯函数 + 响应式变量的方向演进,几乎完全抛弃了 class 的写法。

那 class 还有什么场景会用?

目前还在用 class 的主流场景其实已经很少了,主要剩下:

  • 遗留项目(不得不维护的老代码)
  • 需要使用 React 的 ErrorBoundary(目前官方仍推荐 class 组件做 ErrorBoundary)
  • 某些特殊的高阶组件(HOC)场景(但现在也越来越少)
  • 企业内部的“规定必须用 class”(极少数)

总结:为什么 class 被抛弃的本质

class 组件的设计是面向对象的,而现代前端更倾向于函数式 + 组合式编程范式。

函数式写法 + Hooks / Composition在以下维度全面胜出:

  • 逻辑聚合度更高
  • 没有 this 绑定地狱
  • 更容易复用逻辑(自定义 Hook / composable function)
  • 官方优先支持新特性
  • 生态和社区共识已经转向
  • 更符合现代 JS/TS 的发展方向(const/let、箭头函数、解构、模块化)

一句话:

class 组件在前端不是“不好用”,而是“不再是最优解”了。

现在的趋势是:能用函数组件 + Hooks 的地方,尽量不用 class

你现在项目里还在用 class 组件吗?还是已经完全切到 Hooks 了?

http://www.jsqmd.com/news/360384/

相关文章:

  • AI的推荐,总有种“懂我”的感觉
  • Calibre v9.2.0 丨开源电子书管理工具
  • 成本控制背景下的MATLAB许可证管理
  • 为什么很多程序员不用 switch,而是大量的 if...else if ...?
  • 分期乐购物卡回收攻略:永辉超市卡快速变现的方法 - 团团收购物卡回收
  • STAR-CCM+计算资源“弹性资源池”动态伸缩与智能调度策略
  • 2026必备!千笔·专业降AIGC智能体,备受喜爱的降AIGC网站
  • AI医生芯片化:基于ZYNQ的脑肿瘤智能识别IP核深度解析
  • 【题解】[ABC077D] Small Multiple
  • Maven从入门到精通
  • 实测对比后!千笔·降AIGC助手,本科生降重首选平台
  • 定稿前必看!8个AI论文写作软件测评:专科生毕业论文+科研写作必备工具推荐
  • 搞技术的人员为什么通常当不了领导?
  • 参考文献崩了?9个AI论文写作软件深度测评与推荐,继续教育毕业论文必备工具
  • 测试用例(设计、实现、执行)分析与策略制定 - 实践
  • 分期乐购物卡真的能回收吗?永辉超市卡回收平台大揭秘 - 团团收购物卡回收
  • 百考通AI:破解程序员“进阶”与“面试”的双重困境
  • Spring 的基石:OCP、DIP 与 IoC 实现详解
  • 【高精度气象】园区能耗管理三大坑:抄表式统计、撒网式改造、手环式预警,2026年的节能方案已全面升级
  • 【风电光伏功率预测】季节一换预测就崩盘?2026新能源功率预测的“分布漂移”攻坚战
  • HoRain云--Golang编译极简可执行文件指南
  • Python函数详解:从语法到参数传递的思考
  • 别再傻傻原价点!COTX茶月山“薅羊毛”攻略,美团狂省指南 - Top品牌推荐
  • 人工智能应用- 语言处理:06.打破语言边界
  • 【高精度气象】气象数据SLA签完总扯皮?2026年签服标准出炉:四个指标锁定百万风险
  • 红包“斤”斤计较,美团“惠”省到底! - Top品牌推荐
  • 【风电光伏功率预测】模型越复杂,储能收益越差?2026年拐点已至:“区间预测+智能触发”正重塑游戏规则
  • HoRain云--详解Native Memory Tracking之追踪区域分析
  • 省钱秘籍大公开!JPG外卖如何让你每单都省下配送费 - Top品牌推荐
  • 零信任架构:为什么现代网络安全不再相信“内部安全”?