react compiler能用了吗,原理是什么
react 的设计思路很简单。就是
const ui = f(state)
但在复杂的现实世界,想要理想化的实践函数式编程要考虑的东西太多了。
状态来源千奇百怪,状态的变化也总出乎意料。
react不得不搞出一大堆的api,试图解决各种边界情况。但api越来越多,心智负担也越来越重,随后react团队提出了react compiler,旨在编译时自动优化,尽可能减少心智负担。
显然这也是为以后新特性铺路,有了react compiler,相当于在编译时有了更多操作空间(比如组件声明Props类型就自动解构),以后可以在这里搞更多的新功能。
那现在react compiler能用了吗?
能用。而且不只是react 19能用,react 18/17都能用。
老项目迁移
老项目能不能直接用,取决于代码写的合不合乎规范。合乎规范就能用,Meta已经在生产环境上用了很长时间了。
可以借着ESLint来检查代码,不报错就问题不大。我知道老项目里有很多屎山,大家堆屎的时候喜欢直接禁用ESlint。像这种可疑的地方可以显式声明"use no memo",跳过react compiler。
如果还嫌有风险的话,可以在项目里创建一个新目录:src/modern,指定只有这里用react compiler。
如果不方便创建新目录,那可以开启“注释”模式,只有显式声明"use memo"的组件才会被react编译器优化。
总之,还是看个人,如果你觉得天天写useMemo/useCallback,心智负担太重了那就赶紧上react compiler吧。
具体配置方法可以查阅文档:https://zh-hans.react.dev/learn/react-compiler/incremental-adoption
工作原理

- 创建数组$,静态分析该组件需要几个缓存槽位。
- 把依赖项和模板都存到数组里,如果没依赖项就sentinel Symbol替代。
- 在组件重新渲染时作判断,依赖项发生改变了就重存一遍依赖项和模板,并返回模板,依赖项没变就直接返回缓存的模板。
- 无需useMemo,仅条件判断即可。
注意项
目前不开启react compiler的一个主要障碍是一些项目为了更快的编译速度使用swc替代了babel。而react compiler目前是以babel插件的形式存在的,所以想在swc项目中使用babel可能会比较麻烦。
另外,并不是永远不用useCallback/useMemo了,useEffect 的 deps 数组、第三方库的 config 对象仍建议保留手动 memo。
2026年你的项目用上react compiler了吗,遇到哪些坑欢迎评论区留言。