Skip to content

Commit 06746fa

Browse files
committed
Merge pull request airbnb#688 from joaomilho/patch-2
[guide] Favor stateless functions over classes when there's no state
2 parents 36765e4 + 4d2578c commit 06746fa

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

react/README.md

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
## Table of Contents
66

77
1. [Basic Rules](#basic-rules)
8-
1. [Class vs `React.createClass`](#class-vs-reactcreateclass)
8+
1. [Class vs `React.createClass` vs stateless](#class-vs-reactcreateclass-vs-stateless)
99
1. [Naming](#naming)
1010
1. [Declaration](#declaration)
1111
1. [Alignment](#alignment)
@@ -25,27 +25,46 @@
2525
- Always use JSX syntax.
2626
- Do not use `React.createElement` unless you're initializing the app from a file that is not JSX.
2727

28-
## Class vs `React.createClass`
28+
## Class vs `React.createClass` vs stateless
2929

30-
- Use `class extends React.Component` unless you have a very good reason to use mixins.
30+
- If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass` unless you have a very good reason to use mixins.
3131

3232
eslint rules: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md).
3333

3434
```javascript
3535
// bad
3636
const Listing = React.createClass({
37+
// ...
3738
render() {
38-
return <div />;
39+
return <div>{this.state.hello}</div>;
3940
}
4041
});
4142

4243
// good
4344
class Listing extends React.Component {
45+
// ...
4446
render() {
45-
return <div />;
47+
return <div>{this.state.hello}</div>;
4648
}
4749
}
4850
```
51+
52+
And if you don't have state or refs, prefer functions over classes:
53+
54+
```javascript
55+
56+
// bad
57+
class Listing extends React.Component {
58+
render() {
59+
return <div>{this.props.hello}</div>;
60+
}
61+
}
62+
63+
// good
64+
function Listing({ hello }) {
65+
return <div>{hello}</div>;
66+
}
67+
```
4968
5069
## Naming
5170

0 commit comments

Comments
 (0)