在日常团队开发中,每个人编写的组件质量和风格各不相同。由于需求较多,组件无法扩展和维护。导致很多业务组件功能重复,使用起来相当不爽。下面我们就从代码结构的角度谈谈如何设计一个更优雅的React组件。组件目录结构好的组件都有清晰的目录结构。这里的目录结构分为项目级结构和单组件级结构。容器组件/展示组件在项目中,我们的目录结构可以按照组件和业务耦合来划分。与业务的耦合度越低,复用性越强。展示组件只关注展示层,可以在不耦合业务的情况下,在多处复用。容器组件主要侧重于业务处理,容器组件通过组合显示组件构建一个完整的视图。示例:src/components/(普通组件,与业务无关,其他所有组件均可调用)Button/index.tsxcontainers/(容器组件,与业务深度耦合,可被页面组件调用)Hello/Kitty/(容器component唯一组件,不能与其他容器组件共享)index.tsxWorld/components/index.tsxhooks/(publichooks)pages/(pagecomponents,specificpages,noreusability)my-app/store/(statemanagement)services/(接口定义)utils/(工具类)组件目录结构我们可以根据文件类型/功能/职责等划分不同的目录。图片等目录可以根据文件类型进行分隔。__tests__、demo等目录可以根据文件功能分开。types、utils、hooks等目录可以根据文件职责分开。根据组件的特点,目录如HelloWorld/(普通业务Component)__tests__/(测试用例)demo/(组件示例)Bar/(具体组件分类)Kitty.tsx(具体组件)Kitty.module.lessFoo/hooks/(customhooks)images/(imagedirectory)types/(Typedefinition)utils/(toolclassmethod)index.tsx(exportfile)比如我最近写的一个表格组件的目录结构:├─SheetTable│├─Cell│├─Header│├─Layer│├─Main│├─Row│├─Store│├─types│└─utils组件内部结构组件需要保持良好的顺序逻辑,统一团队规范。公约确立后,如此明确的定义,让我们可以更清楚地检讨。导入顺序导入顺序为node_modules->@/开头文件->相对路径文件->当前组件样式文件//导入node_modules依赖importReactfrom'react';//导入公共组件importButtonfrom'@/components/Button';//ImportRelativepathcomponentimportFoofrom'./Foo';//导入同名对应的.less文件,命名为stylesimportstylesfrom'./Kitty.module.less';使用组件名称+Props命名Props类型并导出。类型和参数的书写顺序是一致的,一般按照[a-z]的顺序定义。禁止把变量的注释放在最后,因为这样会导致编辑器识别错位,无法正确提示/***typedefinition(name:componentname+Props)*/exportinterfaceKittyProps{/***多行注释(建议)*/email:string;//单行注释(不推荐)mobile:string;username:string;//结束注释(禁止)}使用React.FC定义constKitty:React.FC
