UNPKG

@fle-ui/plus-goods-detail-drawer

Version:

@fle-ui/plus-goods-detail-drawer

211 lines (154 loc) 5.11 kB
# Goods Detail Drawer 一个高性能的商品详情抽屉组件,支持商品详情展示、审核流程和变更对比等功能。 ## 功能特性 - 🚀 **高性能渲染** - 使用 React Hooks 优化,减少不必要的重渲染 - 📱 **响应式设计** - 根据屏幕尺寸自动调整抽屉宽度 - 🔍 **审核流程** - 支持商品变更审核、通过、驳回、撤回等操作 - 📊 **变更对比** - 支持变更前后内容对比展示 - 🎨 **主题定制** - 支持 Ant Design 主题色定制 -**无障碍支持** - 支持键盘导航和屏幕阅读器 ## 安装使用 ```bash npm install @fle-ui-plus/goods-detail-drawer ``` ```tsx import { GoodsDetailDrawer } from '@fle-ui-plus/goods-detail-drawer'; const App = () => { const [open, setOpen] = useState(false); return ( <GoodsDetailDrawer open={open} onClose={() => setOpen(false)} request={async () => { // 返回商品详情数据 return { success: true, data: goodsDetail }; }} type="detail" /> ); }; ``` ## API 参数 ### GoodsDetailDrawerProps | 参数 | 说明 | 类型 | 默认值 | | --- | --- | --- | --- | | open | 是否显示抽屉 | boolean | false | | onClose | 关闭抽屉的回调 | () => void | - | | title | 抽屉标题 | string | 根据 type 自动生成 | | request | 获取商品详情的请求函数 | () => Promise<ApiResponse> | - | | width | 抽屉宽度 | string \| number | 响应式宽度 | | type | 抽屉类型 | 'detail' \| 'audit' \| 'readAudit' | 'detail' | | hideFields | 隐藏的字段列表 | HideFieldsType[] | [] | | onPass | 审核通过回调 | () => void | - | | onReject | 审核驳回回调 | (reason: string) => void | - | | onWithdraw | 撤回变更回调 | () => void | - | ### 响应式宽度配置 组件会根据屏幕尺寸自动调整宽度: - 1920px+ : 50vw (大屏幕) - 1440px+ : 60vw (中等屏幕) - 1024px+ : 70vw (小屏幕) - <1024px : 80vw (移动端) ## 性能优化特性 ### 1. React Hooks 优化 - **useMemo**: 缓存计算结果,避免重复计算 - **useCallback**: 缓存函数引用,减少子组件重渲染 - **useEffect**: 优化依赖项,避免不必要的副作用 ### 2. 渲染优化 - 条件渲染优化,减少不必要的 DOM 操作 - 状态管理优化,避免频繁的状态更新 - 事件处理函数优化,使用 useCallback 包装 ### 3. 内存管理 - 使用 ResizeObserver 监听尺寸变化 - 提供降级方案,兼容性更好 - 及时清理事件监听器和观察器 ## 最佳实践 ### 1. 数据请求优化 ```tsx // 推荐:使用 useCallback 包装请求函数 const handleRequest = useCallback(async () => { // 请求逻辑 }, [dependencies]); // 避免:每次渲染都创建新函数 const handleRequest = async () => { // 请求逻辑 }; ``` ### 2. 条件渲染优化 ```tsx // 推荐:使用 useMemo 缓存计算结果 const showAlert = useMemo(() => isAudit && data?.status && !loading, [isAudit, data?.status, loading] ); // 避免:在 JSX 中直接计算 {(type === 'audit' || type === 'readAudit') && data?.status && !loading && ( <Alert /> )} ``` ### 3. 事件处理优化 ```tsx // 推荐:使用 useCallback 包装事件处理函数 const handleReject = useCallback(() => { // 处理逻辑 }, [dependencies]); // 避免:内联函数 onClick={() => setRejectOpen(true)} ``` ## 类型定义 ### GoodsInfo 商品基础信息接口,包含: - `basicInfo`: 基础信息(名称、描述、图片等) - `salesInfo`: 销售信息(价格、库存等) - `freightInfo`: 物流信息(运费、配送等) - `goodsDetail`: 商品详情(规格、SKU等) ### AuditInfo 审核信息接口,包含: - `status`: 审核状态(10: 待审核, 20: 通过, -10: 驳回, -20: 撤回) - `changeType`: 变更类型 - `applyReason`: 申请原因 - `beforeContent`: 变更前内容 - `changeContent`: 变更后内容 ## 样式定制 组件使用 Less 预处理器,支持主题色定制: ```less // 自定义主题色 :root { --fle-ui-primary-color: #1890ff; } // 组件样式覆盖 .goods-detail-drawer { &-section { padding: 24px 20px 24px 32px; &-title::before { background-color: var(--fle-ui-primary-color); } } } ``` ## 错误处理 组件内置错误处理机制: - 网络请求失败时显示错误提示 - 数据为空时显示空状态页面 - 提供重试机制,提升用户体验 ## 浏览器兼容性 - Chrome >= 64 - Firefox >= 55 - Safari >= 11.1 - Edge >= 79 对于不支持 ResizeObserver 的浏览器,组件会自动降级使用定时器方案。 ## 更新日志 ### v2.0.0 - ✨ 新增性能优化,使用 React Hooks 优化渲染 - 🚀 优化响应式设计,支持动态宽度调整 - 🔧 重构代码结构,提升可维护性 - 🐛 修复内存泄漏问题 - 📱 优化移动端体验 ### v1.0.0 - 🎉 首次发布 - ✨ 支持商品详情展示 - ✨ 支持审核流程 - ✨ 支持变更对比 ## 贡献指南 欢迎提交 Issue 和 Pull Request 来改进这个组件。 ## 许可证 MIT License