Refine项目从3.x到4.x版本迁移指南
前言
Refine作为一款优秀的React框架,在3.x版本发布一年后迎来了重大更新。4.x版本针对开发者体验和功能简化进行了全面优化,使框架更加灵活,能够适应更广泛的使用场景。本文将详细介绍从3.x迁移到4.x版本的关键变化和迁移步骤。
自动迁移工具
推荐使用@refinedev/codemod
工具自动完成大部分迁移工作:
npx @refinedev/codemod@latest refine3-to-refine4
该工具会自动处理大部分破坏性变更,但有以下已知限制:
- 无法正确处理TypeScript的实例化表达式
- 无法正确处理类型声明文件(.d.ts)
- 可能无法正确格式化包含React片段(<>...</>)的返回语句
遇到这些问题时,需要手动修改相关文件。
手动迁移步骤
包名变更
所有@pankod
前缀的包已迁移至@refinedev
组织:
npm uninstall @pankod/refine-core @pankod/refine-antd
npm i @refinedev/core @refinedev/antd
核心变更点
路由系统重构
4.x版本引入了全新的路由系统,主要变化包括:
routerProvider
变为可选,Refine现在可以不依赖路由使用- 旧版路由提供器重命名为
legacyRouterProvider
- 资源路由现在支持更灵活的路径定义
resources={[
{
name: "products",
list: "/:tenantId/products",
show: "/:tenantId/products/:id",
edit: "/:tenantId/products/:id/edit",
}
]}
资源定义优化
资源定义结构进行了简化:
resources={[
{
name: "products",
- options: {
- route: "my-products",
- label: "My Products",
- },
+ meta: {
+ label: "My Products",
+ }
}
]}
认证提供器变更
旧版authProvider
重命名为legacyAuthProvider
:
const App = () => {
return (
<Refine
legacyAuthProvider={authProvider}
/>
);
};
使用旧版认证提供器时,需要在hooks中添加兼容标记:
const login = useLogin({
v3LegacyAuthProviderCompatible: true,
});
数据相关变更
数据提供器参数更新
getList
方法参数进行了调整:
getList: ({
pagination: {
+ mode: "off" | "server" | "client",
},
- hasPagination,
+ sorters,
- sort,
+ meta,
- metaData,
})
常用Hooks变更
-
useList
和useInfiniteList
:- 弃用
config
属性,改用独立属性
- 弃用
-
useTable
:- 弃用
initialCurrent
和initialPageSize
,改用pagination
- 弃用
sorter
返回值,改用sorters
- 弃用
-
useSelect
:- 默认禁用分页,需显式设置
pagination.mode
- 默认禁用分页,需显式设置
UI相关变更
Ant Design版本升级
Refine 4.x要求使用Ant Design 5.x版本,升级前请先完成Ant Design的版本迁移。
组件变更
<ReadyPage>
组件已弃用,建议使用自定义页面替代- 所有
metaData
属性更名为meta
迁移建议
- 首先尝试使用自动迁移工具
- 检查自动迁移后的代码,处理工具无法转换的部分
- 重点关注路由和资源定义的变更
- 逐步替换弃用的hooks和组件
- 测试应用功能,特别是路由和数据获取相关部分
通过以上步骤,您可以顺利将项目从Refine 3.x迁移到4.x版本,享受新版本带来的改进和优化。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考