前言
最近一段时间内,哈基人白天打工,晚上做毕设相关或者打游戏,博客或者个人开发已经很少更新了,毕竟从早到晚都干相同的事情确实令人苦恼
最近开始将过去的博客前端使用React Compiler进行改造。
根据官方示例所言,其可以避免以下的写法
import { useMemo, useCallback, memo } from 'react';
const ExpensiveComponent = memo(function ExpensiveComponent({ data, onClick }) {
const processedData = useMemo(() => {
return expensiveProcessing(data);
}, [data]);
const handleClick = useCallback((item) => {
onClick(item.id);
}, [onClick]);
return (
<div>
{processedData.map(item => (
<Item key={item.id} onClick={() => handleClick(item)} />
))}
</div>
);
});
- 跳过组件的级联重新渲染
- 重新渲染
<Parent />会导致其组件树中的许多组件重新渲染,即使只有<Parent />发生了变化
- 重新渲染
- 跳过 React 外部的昂贵计算
- 例如,在组件或 Hook 中调用
expensivelyProcessAReallyLargeArrayOfObjects()这个处理大数据数组的函数
- 例如,在组件或 Hook 中调用
对于本博客的简单用例,最大的好处是可以节省很多开发时的心智负担,变量或函数可以少考虑依赖数组。
改造时
博客使用vite构建工具,对 vite.config.ts和eslint.config.js配置文件进行改造,同时这一过程中还需要更新或安装一些库。
具体的变更可以参考
使用React Compiler · scarletborder/bloggerv2@8e63b5e
小插曲
之前使用了 react + swc , 但是vite建议使用Rolldown以提升构建性能,正好我之前没有使用任何babel插件或者swc插件,直接无感升级。
另外开启dev服务器时还出现了以下warning
You or a plugin you are using have set
optimizeDeps.esbuildOptionsbut this option is now deprecated. Vite now uses Rolldown to optimize the dependencies. Please useoptimizeDeps.rollupOptionsinstead.
这是因为我起初参考React Compiler官方迁移指南时,使用了Babel插件
import babel from 'vite-plugin-babel';
...
plugins:[
react(),
//...
babel({
babelConfig: {
plugins: ['babel-plugin-react-compiler'],
},
}),
]
解决方案是将 Babel 配置直接整合到官方的 React 插件 (@vitejs/plugin-react) 中,而不是使用一个独立的 Babel 插件。这样做更简洁,并且能确保与 Vite 的最新版本兼容。
plugins: [
react({
babel: {
plugins: ['babel-plugin-react-compiler'],
},
}),
],
后续
全文搜索 useCallback 和 useMemo , 进行判断和替代
但是我在编写博客前端时,用了大量ahooks的useMemorized(),他只是用来持久化函数,在我的案例中尚未用来根据状态刷新函数,因此保留不做替换。
关于博客的后续发展
博客主要框架已经搭建完成,虽然使用的都是自建组件(AI chat出奇迹),但是目前能够非常好的适配PC和Mobile二者。除了特殊情况,将不考虑修改现有组件。可以肯定的是,Blogroll组件将首先被TDesign的合适组件替代,因为他现在看来确实太丑了hhh
未来的发展方向是首先从theme入手,尝试接入未来的组件库 TDesign, 先使用TDesign的颜色方案,并将现有颜色方案以TDesign建议的方式注入TDesign方案。这里的样式只导入颜色。旧组件和未来的新组件都单向依赖增添的TDesign颜色方案。
注入颜色方案后,将优化现有组件的颜色样式,例如翻页组件等。
之后如果有拓展博客显示的需求,将优先考虑使用来自TDesign的组件。这样做,一方面考虑到自建组件的麻烦,另一方面TDesign的组件确实很现代化,与本博客简约的风格契合。
评论区 (0)