-
Notifications
You must be signed in to change notification settings - Fork 592
Tech upgrade
赵鹏程(珵之) edited this page Jan 11, 2024
·
38 revisions
Next组件库经过长期发展,已经有了很重的历史包袱,技术架构、用户体验已经全面落后于开源社区同类竞品,急需从用户
、开发者
角度出发,进行一波技术升级,为后续的发展铺平道路。
本次升级在 1.x 的基础上进行技术性改造,不涉及组件功能的调整,完全向前兼容。计划发布 1.27.x
版本,并停止 minor 位的升级。目前已经完成项目基本结构与部分组件的的改造,发布了 1.27.2
版本,接下来需要结合社区力量,将剩余组件逐步升级上来。
- 向前完全兼容性
- TS 类型明确
- 文档清晰完备
- 测试用例稳定有效
# 通过脚本将 components/date-picker 目录内所有的 js 文件重命名为 ts 文件
# 脚本根据文件内是否有 jsx 语法来确定文件后缀为 .tsx 还是 .ts
npm run tool:rename2ts date-picker
# 执行一次 commit,保证 git 能够正确追踪文件历史
git commit -m 'refactor(DatePicker): rename to ts'
- 组件的类型集中在 types.ts 文件内管理
- import 不允许携带文件后缀,如:import '../../style.js'
- 组件入口文件导出规范
components/date-picker/index.ts
- default 导出组件本身,如:
export default config(DatePicker)
- named 导出组件 Props 类型定义
{组件名大驼峰}Props
,如:export type { DatePickerProps }
- named 导出原先
components/*/index.d.ts
导出的其它类型 - 查看示例
- default 导出组件本身,如:
参考:components/button/index.tsx
import * as React from 'react';
import ConfigProvider from '../config-provider';
// src/radio/types.ts 内集中放置radio相关所有类型
import type { RadioProps, RadioState, RadioShape, RadioGroupProps } from './types';
// 子组件 Group
import Group from './group';
class Radio extends React.Component<RadioProps, RadioState> {
static Group = Group;
// ...
render() {}
};
// 导出组件Props,以及其他原先在 types/radio/index.d.ts 里导出的类型,例如RadioShape
export type { RadioProps, RadioGroupProps, RadioShape };
// default 导出组件实现
export default ConfigProvider.config(Radio);