news 2026/5/10 17:50:06

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
类为什么在前端框架用的越来越少了?

类(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 了?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 9:19:28

【java日记】07:日志和git

HTTP响应码 信息响应 (100–199) 成功响应 (200–299) 重定向消息 (300–399) 客户端错误响应 (400–499) 服务端错误响应 (500–599) 日志 在resources目录下&#xff0c;创建文件logback-spring.xml <?xml version"1.0" encoding"UTF-8"?> <c…

作者头像 李华
网站建设 2026/5/9 10:22:30

建议收藏|专科生专用AI论文工具 —— 千笔写作工具

你是否曾为论文选题发愁&#xff1f;是否在写到一半时突然卡文&#xff0c;毫无头绪&#xff1f;又或者反复修改却总对结果不满意&#xff1f;专科生的论文写作之路&#xff0c;往往充满挑战。从开题到查重&#xff0c;每一个环节都可能让人焦头烂额。而如今&#xff0c;一款专…

作者头像 李华
网站建设 2026/5/6 12:22:35

springboot基于Java的教学评价管理系统(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus系统测试 四、代码参考 源码获取 目的 SpringBoot框架与Java语言的结合&#xff0c;为教学评价管理系统提供了强大的技术支撑。该系统通过…

作者头像 李华