发布于 2026-01-06 7 阅读
0

我为什么停止使用 React(你也应该停止使用)🔥

我为什么停止使用 React(你也应该停止使用)🔥

这个号称能简化一切的框架,结果却让我的代码库变成了一场噩梦。


TL;DR:在用 React 开发了 4 年,构建了 20 多个生产应用之后,我决定不再用 React 了。以下是我转而使用 Svelte 并且再也没有回头的原因。

崩溃点

上个月,我花了六个小时调试一个“简单”的表单组件。问题出在哪里?useState 没有立即更新。这是 React 的一个经典陷阱,即使是资深开发者也常常被它难住。

那时我才意识到:我花在与 React 作斗争上的时间比实际构建功能的时间还要多。

数字不会说谎

让我来展示一下我的最新项目从 React 切换到 Svelte 后的变化:

Bundle Size:
React + Redux: 847kb
Svelte: 23kb

Build Time:
React: 45 seconds
Svelte: 3 seconds

Lines of Code:
React: 2,847 lines
Svelte: 892 lines (same functionality)
Enter fullscreen mode Exit fullscreen mode

这意味着文件包体积缩小了 97%,构建速度提高了 15 倍。

开发者体验革命

之前(React):

const [count, setCount] = useState(0);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);

useEffect(() => {
  setLoading(true);
  fetchData()
    .then(data => {
      setCount(data.count);
      setLoading(false);
    })
    .catch(err => {
      setError(err.message);
      setLoading(false);
    });
}, []);
Enter fullscreen mode Exit fullscreen mode

之后(Svelte):

<script>
  let count = 0;
  let promise = fetchData();
</script>

{#await promise}
  Loading...
{:then data}
  {count = data.count}
{:catch error}
  {error.message}
{/await}
Enter fullscreen mode Exit fullscreen mode

Svelte 版本不仅篇幅更短,而且更易读。

React 做错了什么

1. 虚拟 DOM 的谎言

我们曾被告知虚拟 DOM 能让 React 运行得更快。事实并非如此。它反而会增加开销。Svelte 编译成原生 JavaScript,直接操作 DOM。结果呢?运行时性能提升了 3 倍。

2. 生态系统陷阱

React 的生态系统庞大但分散。需要状态管理?你可以选择 Redux、Zustand、Context 或其他 47 种方案。需要样式?CSS-in-JS、CSS Modules、styled-components……

分析瘫痪是真实存在的。

3. 学习曲线永无止境

Hooks、Context、Suspense、并发模式、服务器组件……React 的复杂性与日俱增。我使用 React 已经四年了,但每周仍然会遇到新的陷阱。

我希望我早点知道的事

默认性能

// React: Manual optimization needed everywhere
const MemoizedComponent = React.memo(({ data }) => {
  const expensiveValue = useMemo(() => 
    processData(data), [data]
  );

  return <div>{expensiveValue}</div>;
});

// Svelte: Fast by default
<script>
  export let data;
  $: expensiveValue = processData(data);
</script>

<div>{expensiveValue}</div>
Enter fullscreen mode Exit fullscreen mode

内置动画

<script>
  import { fade, slide } from 'svelte/transition';
  let visible = true;
</script>

{#if visible}
  <div transition:fade>
    <p transition:slide>Smooth animations, zero configuration</p>
  </div>
{/if}
Enter fullscreen mode Exit fullscreen mode

试试在不使用 200kb 动画库的情况下,用 React 实现这个功能。

移民的现实

“但是生态系统呢?”

这个问题值得关注。以下是我的发现:

  • 组件库: SvelteKit UI、Carbon Components Svelte
  • 状态管理:内置存储(小巧而强大)
  • 路由: SvelteKit(比 Next.js 更好)
  • 测试: Vitest 运行完美
  • TypeScript:一流的支持

实际结果

自从改用 Svelte 之后:

部署速度:提升 3 倍
软件包大小:缩小 95%

开发时间:缩短 40%
错误报告:减少 60%
团队满意度:极高

令人不安的真相

React 成了 2024 年的 jQuery。对于大多数使用场景来说过于复杂,靠着发展势头和大公司的支持才得以存活。

与此同时,Svelte 运行起来却很流畅。

无需费脑筋。无需陷入性能优化的泥潭。无需忍受依赖地狱。

只要写出能实现其外观所显示功能的代码就行了。

接下来是什么?

我并不是说 React 一无是处。对于拥有现有 React 代码库的大型团队来说,迁移可能并不划算。

但对于新项目呢?每次都选择Svelte。

Web开发界正在慢慢觉醒:

  • GitHub 的新仪表盘:基于 Svelte 构建
  • 苹果开发者文档:SvelteKit
  • 《纽约时报》:迁移到苗条

自己动手试试

别光听我说,花一个周末用 Svelte 做点东西试试。

npm create svelte@latest my-app
cd my-app
npm install
npm run dev
Enter fullscreen mode Exit fullscreen mode

我保证你也会有我当时那种“卧槽”的惊呼时刻。


你的看法是什么?你仍然支持 React,还是准备尝试一些新的东西?

请在下方留言👇

文章来源:https://dev.to/shiva_shanker_k/why-i-stopped-using-react-and-you-should-too-6lf