- 每个文件只包含一个 React 组件
- 使用JSX语法
- 除非是从一个非JSX文件中初始化 app,否则不要使用React.createElement </ul>
- 除非有更好的理由使用混淆(mixins),否则就使用组件类继承React.Component。eslint 规则:react/prefer-es6-class </ul>
Class vs React.createClass
// bad const Listing = React.createClass({ render() {
return <div />;
讯享网
} });
// good class Listing extends React.Component { render() {
讯享网return <div />;
} }</pre>
- 扩展名: 使用jsx作为 React 组件的扩展名
- 文件名: 文件命名采用帕斯卡命名法,如:ReservationCard.jsx
- 引用名: 组件引用采用帕斯卡命名法,其实例采用驼峰式命名法。eslint rules: react/jsx-pascal-case </ul>
- 组件命名: 使用文件名作为组件名。例如:ReservationCard.jsx组件的引用名应该是ReservationCard。然而,对于一个目录的根组件,应该使用index.jsx作为文件名,使用目录名作为组件名。 </ul>
- 不要通过displayName来命名组件,通过引用来命名组件 </ul>
- 对于JSX语法,遵循下面的对齐风格。eslint rules: react/jsx-closing-bracket-location </ul>
// bad const reservationCard = require(’https://www.open-open.com/lib/view/ReservationCard’);
// good const ReservationCard = require(’https://www.open-open.com/lib/view/ReservationCard’);
// bad const ReservationItem = <ReservationCard />;
// good const reservationItem = <ReservationCard />;</pre>
// bad const Footer = require(’https://www.open-open.com/lib/view/Footer/Footer.jsx’)
// bad const Footer = require(’https://www.open-open.com/lib/view/Footer/index.jsx’)
// good const Footer = require(’https://www.open-open.com/lib/view/Footer’)</pre>
// bad export default React.createClass({ displayName: ‘ReservationCard’, // stuff goes here });
// good export default class ReservationCard extends React.Component { }</pre>
// bad <Foo superLongParam=“bar”
anotherSuperLongParam="baz" /></p>
// good <Foo
讯享网superLongParam="bar" anotherSuperLongParam="baz"
/>
// if props fit in one line then keep it on the same line <Foo bar=“bar” />
// children get indented normally <Foo
superLongParam="bar" anotherSuperLongParam="baz"
>
讯享网<Spazz />
</Foo></pre>
- 对于JSX使用双引号,对其它所有 JS 属性使用单引号 </ul>
- 在自闭和标签之前留一个空格 </ul>
- 属性名采用驼峰式命名法 </ul>
- 当组件跨行时,要用括号包裹 JSX 标签。eslint rules: react/wrap-multilines </ul>
- 没有子组件的父组件使用自闭和标签。eslint rules: react/self-closing-comp </ul>
- 如果组件有多行属性,闭合标签应写在新的一行上。eslint rules: react/jsx-closing-bracket-location </ul>
- 不要对 React 组件的内置方法使用underscore前缀 </ul>
-
继承 React.Component 的类的方法遵循下面的顺序
</li> </ul>- constructor
- optional static methods
- getChildContext
- componentWillMount
- componentDidMount
- componentWillReceiveProps
- shouldComponentUpdate
- componentWillUpdate
- componentDidUpdate
- componentWillUnmount
- clickHandlers or eventHandlers like onClickSubmit() or onChangeDescription()
- getter methods for render like getSelectReason() or getFooterContent()
- Optional render methods like renderNavigation() or renderProfilePicture()
-
render
</li> </ol>- 怎么定义 propTypes,defaultProps,contextTypes 等等… </ul>
import React, { PropTypes } from ‘react’;
const propTypes = { id: PropTypes.number.isRequired, url: PropTypes.string.isRequired, text: PropTypes.string, };
const defaultProps = { text: ‘Hello World’, };
class Link extends React.Component { static methodsAreOk() {
讯享网
return true;}
render() {
return <a href=https://www.open-open.com/lib/view/{this.props.url} data-id={this.props.id}>{this.props.text}</a>} }
Link.propTypes = propTypes; Link.defaultProps = defaultProps;
export default Link;</pre>
-
使用 React.createClass 时,方法顺序如下:
</li> </ul>- displayName
- propTypes
- contextTypes
- childContextTypes
- mixins
- statics
- defaultProps
- getDefaultProps
- getInitialState
- getChildContext
- componentWillMount
- componentDidMount
- componentWillReceiveProps
- shouldComponentUpdate
- componentWillUpdate
- componentDidUpdate
- componentWillUnmount
- clickHandlers or eventHandlers like onClickSubmit() or onChangeDescription()
- getter methods for render like getSelectReason() or getFooterContent()
- Optional render methods like renderNavigation() or renderProfilePicture()
- render </ol>
eslint rules: react/sort-comp
来自:https://github.com/dwqs/react-style-guide

为什么?因为 JSX 属性不能包含被转移的引号,并且双引号使得如”don’t”一样的连接词很容易被输入。常规的 HTML 属性也应该使用双引号而不是单引号,JSX 属性反映了这个约定。
</blockquote>eslint rules: jsx-quotes
// bad <Foo bar=‘bar’ />
// good <Foo bar=“bar” />
// bad <Foo style={{ left: “20px” }} />
// good <Foo style={{ left: ‘20px’ }} /></pre>
// bad <Foo/>
// very bad <Foo />
// bad <Foo />
// good <Foo /></pre>
// bad <Foo UserName=“hello” phone_number={} />
// good <Foo userName=“hello” phoneNumber={} /></pre>
/// 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>;}</pre>
// bad <Foo className=“stuff”></Foo>
// good <Foo className=“stuff” /></pre>
// bad <Foo
讯享网bar="bar" baz="baz" /></p>// good <Foo
bar="bar" baz="baz"/></pre>
// bad React.createClass({ _onClickSubmit() {
讯享网// do stuff}
// other stuff });
// good class extends React.Component { onClickSubmit() {
// do stuff}
// other stuff });</pre>


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/202158.html