组件化最佳实践
JUI核心是单文件组件的架构模式,以组件化分而治之的指导原则部署代码,可以将整个应用理解为一个大的组件,布局是其子组件,功能页面是布局组件的子组件,功能模块又是功能页面的子组件,依次类推,整个应用将有许多个独立的不同规模、不同功能的独立分治的模块/组件组成。
组件根据功能不同分为页面组件和功能组件。
页面组件
页面组件指配置了路由,配合路由实现界面的跳转,或者通过链接直接访问的模块,页面组件可以由若干子页面组件、或者相对独立功能的组件完成一个视图页面中的大功能。在JUI中,页面组件通常部署在pages
目录中。
pages/页面组件
├── index.js
├── index.less #可以有 样式
├── assets #可以有 图片、字体等静态资产
├── components #可以有 相对独立功能的子组件
├── pages #可以有 若干 子页面组件
├── routes.js #可以有 子页面组件的路由配置
└── store.js #可以有 子页面组件间共享状态的store配置
功能组件
功能组件只负责一块相对独立、稳定的功能,没有路由配置,可能是纯静态的,也可能包含自己的 state,但不涉及多个组件间共享的数据流,仅受父组件(通常是一个页面组件)传递的参数控制。在JUI中,功能组件通常部署在components
目录中。
components/功能组件
├── index.js
├── index.less #可以有 样式
├── assets #可以有 图片、字体等静态资产
└── components #可以有 相对独立功能的子组件
组件结构概览
index #页面组件
├── api
├── app.js
├── assets
├── components
├── index.html
├── index.js
├── index.less
├── layout
│ ├── exception
│ │ ├── components #功能组件
│ │ ├── index.js
│ │ ├── pages #页面组件
│ │ │ ├── 403.js
│ │ │ ├── 404.js
│ │ │ └── 500.js
│ │ └── routes.js
│ ├── login
│ │ ├── assets
│ │ ├── components #功能组件
│ │ ├── index.js
│ │ ├── index.less
│ │ ├── pages #页面组件
│ │ │ ├── login
│ │ │ │ ├── index.js
│ │ │ │ └── index.less
│ │ │ ├── register
│ │ │ │ ├── index.js
│ │ │ │ └── index.less
│ │ │ └── register-result
│ │ │ ├── index.js
│ │ │ ├── index.less
│ │ │ ├── result.js
│ │ │ └── result.less
│ │ └── routes.js
│ └── main
│ ├── components
│ │ ├── footer
│ │ ├── header
│ │ ├── page-wrapper
│ │ └── sider-menu
│ ├── config.js
│ ├── index.js
│ ├── index.less
│ ├── menu.js
│ ├── pages #页面组件
│ │ ├── basic-form
│ │ │ ├── index.js
│ │ │ └── index.less
│ │ ├── basic-table
│ │ │ ├── components #功能组件
│ │ │ ├── index.js
│ │ │ └── service.js
│ │ ├── dashboard
│ │ │ └── index.js
│ │ ├── search-table
│ │ │ ├── components #功能组件
│ │ │ └── index.js
│ │ └── step-form
│ │ ├── components #功能组件
│ │ ├── index.js
│ │ ├── index.less
│ │ ├── pages #页面组件
│ │ │ ├── step1.js
│ │ │ ├── step2.js
│ │ │ ├── step3.js
│ │ │ └── style.less
│ │ ├── routes.js
│ │ └── store.js
│ └── routes.js
├── routes.js
├── store.js
└── utils