React编码规范
- 组件中未使用refs或state时,更好的方式使用普通函数(非箭头函数)替代类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class Listing extends React.Component { render() { return <div>{this.props.hello}</div>; } }
const Listing = ({ hello }) => ( <div>{hello}</div> );
// good function Listing({ hello }) { return <div>{hello}</div>; }
|
1 2 3 4 5
| export default class ReservationCard;
import ReservationCard from './ReservationCard';
const reservationItem = <ReservationCard />;
|
组件名和组件的文件名采用相同的帕斯卡命名,即驼峰式命名首字母大写。
组件实例采用驼峰命名。
1 2 3 4 5 6 7 8 9
| <Foo superLongParam="bar" anotherSuperLongParam="baz" />
<Foo superLongParam="bar" anotherSuperLongParam="baz" />
|
1 2 3 4 5 6 7 8
| <Foo />
<Foo />
<Foo width={ 50 } />
|
在自动关闭的标签前加一个空格。
1 2 3 4 5
| <img src="hello.jpg" alt="Picture of me waving hello" />
<img src="hello.jpg" alt="Me waving hello" />
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| render() { return <MyComponent className="long body" foo="bar"> <MyChild /> </MyComponent>; }
render() { return ( <MyComponent className="long body" foo="bar"> <MyChild /> </MyComponent> ); }
|
多行JSX标签写在()里,单行可直接书写。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class extends React.Component { onClickDiv() { }
render() { return <div onClick={this.onClickDiv.bind(this)} />; } }
// good class extends React.Component { constructor(props) { super(props);
this.onClickDiv = this.onClickDiv.bind(this); }
onClickDiv() { // do stuff }
render() { return <div onClick={this.onClickDiv} />; } }
|
在render过程中使用bind绑定this,每次都会新建一个新的函数,浪费资源。可提前绑定在构造函数里。