4.1 react 代码规范
关于
基础规范
组件结构
命名规范
jsx 书写规范
eslint-plugin-react
关于
基础规范
组件结构
命名规范
jsx 书写规范
eslint-plugin-react
在代码的设计上,每个团队可能都有一定的代码规范和模式,好的代码规范能够提高代码的可读性便于协作沟通,好的模式能够上层设计上避免不必要的 bug 出现。本节会参考社区提供一些 React 的规范和优秀的设计模式。
基础规范
统一全部采用 Es6
组件文件名称采用大驼峰命名
组件结构
总体规则: stateless(Function) 优先于 Es6 Class 优先于 React.createClass;
书写规则: 规范组件内部方法的定义顺序
Es6 class 定义规范:
static方法constructorgetChildContextcomponentWillMountcomponentDidMountcomponentWillReceivePropsshouldComponentUpdatecomponentWillUpdatecomponentDidUpdatecomponentWillUnmountclickHandlers + eventHandlers 如
onClickSubmit()或onChangeDescription()getter methods for
render如getSelectReason()或getFooterContent()render methods 如
renderNavigation()或renderProfilePicture()render
以 Es6 Class 定义的组件为例;
const defaultProps = {
name: 'Guest'
};
const propTypes = {
name: React.PropTypes.string
};
class Person extends React.Component {
// 构造函数
constructor (props) {
super(props);
// 定义 statethis.state = { smiling: false };
// 定义 eventHandlerthis.handleClick = this.handleClick.bind(this);
}
// 生命周期方法
componentWillMount () {},
componentDidMount () {},
componentWillUnmount () {},
// getters and setters
get attr() {}
// handlers
handleClick() {},
// render
renderChild() {},
render () {},
}
/**
* 类变量定义
*/
Person.defaultProps = defaultProps;
/**
* 统一都要定义 propTypes
* @type {Object}
*/
Person.propTypes = propTypes;
命名规范
组件名称:大驼峰
属性名称:小驼峰
事件处理函数:
handleSomething自定义事件属性名称:
onSomething={this.handleSomething}key: 不能使用数组 index ,构造或使用唯一的 id
组件方法名称:避免使用下划线开头的命名
jsx 书写规范
自闭合
// bad
<Foo className="stuff"></Foo>
// good
<Foo className="stuff" />
属性对齐
// bad
<Foo superLongParam="bar"
anotherSuperLongParam="baz" />
// good
<Foo
superLongParam="bar"
anotherSuperLongParam="baz"
/>
// if props fit in one line then keep it on the same line
<Foo bar="bar" />
返回
// bad
render() {
return <MyComponent className="long body" foo="bar"><MyChild /></MyComponent>;
}
// good
render() {
return (
<MyComponent className="long body" foo="bar"><MyChild /></MyComponent>
);
}
// good, when single line
render() {
const body = <div>hello</div>;
return <MyComponent>{body}</MyComponent>;
}
eslint-plugin-react
规范可以使用 eslint-plugin-react 插件来强制实施,规则和配置可查看
https://github.com/yannickcr/eslint-plugin-react
更多 react 代码规范可参考 https://github.com/airbnb/javascript/tree/master/react
4.1 react 代码规范的更多相关文章
- React Native开发的一种代码规范:Eslint + FlowType
[这篇随笔记录的很简单,没有涉及具体的Eslint规则解释以及FlowType的类型说明和使用等,只是链接了所需的若干文档] js开发很舒服,但是代码一多起来就参差不齐,难以阅读了.所以加上一些代码规 ...
- 在Git上如何强推代码规范
引言 最近参加了“前端规范制定topic”小组,小组成员一起制定了html.css.js.es6.vue和react等规范,但规范制定好了怎么进行推广去强制执行呢,已知我们的项目都是用git做管理的, ...
- JavaScript必备:Google发布的JS代码规范(转)
[翻译]关于Google发布的JS代码规范,你需要了解什么? 翻译 | WhiteYin 译文 | https://github.com/WhiteYin/translation/issues/10 ...
- 中小型前端团队代码规范工程化最佳实践 - ESLint
前言 There are a thousand Hamlets in a thousand people's eyes. 一千个程序员,就有一千种代码风格.在前端开发中,有几个至今还在争论的代码风格差 ...
- eslint+prettier+husky+lint-staged 统一前端代码规范
eslint+prettier+husky+lint-staged 统一前端代码规范 遵循编码规范和使用语法检测,可以很好的提高代码的可读性,可维护性,并有效的减少一些编码错误. 1.终极目标 团队中 ...
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- 谈谈PHP代码规范
[转] http://www.syyong.com/php/Talk-about-PHP-code-specification.html 我向往这样一个php世界,里面没有代码规范之争.你我都一样,都 ...
- 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述
对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...
- C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义
类型判断符号: C#:object a; if(a is int) { } 用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...
随机推荐
- shell从字符串中提取子串(正则表达式)
通过试验,可以通过grep.sed两种方式实现. 假设需要提取libgcc-4.8.5-4.h5.x86_64.rpm中的版本号. grep echo "libgcc-4.8.5-4.h5. ...
- 原生Android项目里嵌入Cordova
Android H5混合开发():原生Android项目里嵌入Cordova 如果安卓项目已经存在了,那么如何使用Cordova做混合开发? 方案1(适用于插件会持续增加或变化的项目): 新建Cord ...
- Java + selenium 启动谷歌浏览器
在之前创建的test项目下建一个test包,然后在包下建一个Chrome.java类.写入如下代码 package test; import java.util.concurrent.TimeUnit ...
- 利用URL Protocol实现网页调用本地应用程序
http://blog.csdn.net/zssureqh/article/details/25828683
- 判断是否英文字母或数字的C#正则表达式
private int IsDigitOrNumber(string str) { if(System.Text.RegularExpressions.Regex.IsMatch(str,@" ...
- leetcode python丑数
# Leetcode 263 丑数### 题目描述 编写一个程序判断给定的数是否为丑数. 丑数就是只包含质因数 `2, 3, 5` 的**正整数**. **示例1:** 输入: 6 输出: true ...
- 关于pandas
axis轴,axis=0为逐行,axis=1为逐列
- SQL必知必会——思维导图
Xmind实在太坑了,竟然不能导出高清图片,我回来折腾个PS整一下!
- 23-python基础-python3-浅拷贝与深拷贝(1)
1.可变和不可变数据类型. 列表是‘可变的’数据类型,它的值可以添加.删除或改变. 字符串是‘不可变的’,它不能被更改. (1)字符串 尝试对字符串中的一个字符重新赋值,将导致TypeError错误. ...
- 在linux上安装jdk
一.环境 1. VMware虚拟机 2. Linux系统(centos7) 安装步骤: 1. 先安装VMtools 2. 查看是否有openjdk,若有先将系统内的openJDK删除(采用 r ...