React编码规范
基本规范
- 一个文件只写一个组件
- 但是假如这个组件是无状态组件,可以写多个在一个文件里
- 使用
JSX
语法 - 不使用
React.createElement
,除非你是在初始化你的app
命名规范
React
模块使用.jsx
后缀组件的文件名,使用帕斯卡命名,实例使用小驼峰
- 当文件名由多个单词组合起来的时候,每个单词首字母大写
- 文件名不使用
**_**
下划线的写法
如果整个文件夹是一个模块,那么使用
index.jsx
作为入口文件,并且直接使用index.jsx
或者文件夹名作为模块的名称,导入不需要精确到index
vue// bad import Footer from './Footer/Footer'; // bad import Footer from './Footer/index'; // good import Footer from './Footer';
避免使用一些内置的属性作为其他用途(props之类的)
属性分行,最后一行写关闭标签,如果属性只有一个,那么不需要分行
JSX的属性总是使用双引号(
**""**
),并且属性使用小驼峰法,当属性值为**true**
可以省略jsx// 多个属性的时候,属性分行写 <Foo name="name" age="age" phoneNumber = {123456789} /> // 一个属性可以不用分行写 <Foo name="name" />
jsx
引号空格里不要加前后空格img
标签总是需要添加alt
属性不使用数组的index来作为属性
**key**
,使用唯一**ID**
目录结构
plain
├── config # umi 配置,包含路由,构建等配置
├── mock # 本地模拟数据
├── public
│ └── favicon.png # Favicon
├── src
│ ├── assets # 本地静态资源
│ ├── components # 业务通用组件
│ ├── e2e # 集成测试用例
│ ├── layouts # 通用布局
│ ├── models # 全局 dva model
│ ├── pages # 业务页面入口和常用模板
│ ├── services # 后台接口服务
│ ├── utils # 工具库
│ ├── locales # 国际化资源
│ ├── global.less # 全局样式
│ └── global.ts # 全局 JS
├── tests # 测试工具
├── README.md
└── package.json
页面代码结构
plain
src
├── components
├── common
└── pages
├── Welcome // 路由组件下不应该再包含其他路由组件,基于这个约定就能清楚的区分路由组件和非路由组件了
| ├── components // 对于复杂的页面可以再自己做更深层次的组织,但建议不要超过三层
| ├── common // 共用的utils,map等存放地点
| | ├── utils.js
| | └── pickAStar.js
| └── index.less
| ├── Form.jsx
| ├── index.jsx // 页面组件的代码
| └── index.less // 页面样式
├── Order // 路由组件下不应该再包含其他路由组件,基于这个约定就能清楚的区分路由组件和非路由组件了
| ├── index.sx
| └── index.less
├── user // 一系列页面推荐通过小写的单一字母做 group 目录
| ├── components // group 下公用的组件集合
| ├── Login // group 下的页面 Login
| ├── Register // group 下的页面 Register
| └── util.js // 这里可以有一些共用方法之类,不做推荐和约束,看业务场景自行做组织
└── * // 其它页面组件代码
- 路由组件:就是你会配置在路由配置中的组件,推荐使用大驼峰法放在
pages
下面 - 不要在路由组件里面嵌套路由组件
- 对于多个页面可能会用到的组件我们推荐放到
**src/components **
- 对于单个页面使用的组件,我们就直接放在路由组件的目录下即可