Skip to content

Commit 3772ff6

Browse files
authored
Update README.md
1 parent cafcae9 commit 3772ff6

File tree

1 file changed

+22
-44
lines changed

1 file changed

+22
-44
lines changed

README.md

Lines changed: 22 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ type Props = {
6565
style?: React.CSSProperties,
6666
};
6767

68-
const MyComponent: React.SFC<Props> = (props) => {
68+
const StatelessComponent: React.SFC<Props> = (props) => {
6969
const { children, ...restProps } = props;
7070
return (
7171
<div {...restProps} >
@@ -74,7 +74,7 @@ const MyComponent: React.SFC<Props> = (props) => {
7474
);
7575
};
7676

77-
export default MyComponent;
77+
export default StatelessComponent;
7878
```
7979

8080
---
@@ -85,49 +85,44 @@ export default MyComponent;
8585
import * as React from 'react';
8686

8787
type Props = {
88-
className?: string,
89-
style?: React.CSSProperties,
9088
initialCount?: number,
9189
};
9290

9391
type State = {
94-
counter: number,
92+
count: number,
9593
};
9694

97-
class MyComponent extends React.Component<Props, State> {
98-
// default props using Property Initializers
95+
class ClassComponent extends React.Component<Props, State> {
9996
static defaultProps: Partial<Props> = {
100-
className: 'default-class',
97+
initialCount: 0,
10198
};
10299

103-
// initial state using Property Initializers
104100
state: State = {
105-
counter: this.props.initialCount || 0,
101+
count: this.props.initialCount!,
106102
};
107103

108-
// lifecycle methods should be declared as normal instance methods and it's fine
104+
// declare lifecycle methods as normal instance methods
109105
componentDidMount() {
110106
// tslint:disable-next-line:no-console
111107
console.log('Mounted!');
112108
}
113109

114-
// handlers using Class Fields with arrow functions
115-
increaseCounter = () => { this.setState({ counter: this.state.counter + 1 }); };
110+
// declare handlers as Class Fields arrow functions
111+
handleIncrement = () => { this.setState({ count: this.state.count + 1 }); };
116112

117113
render() {
118-
const { children, initialCount, ...restProps } = this.props;
114+
const { count } = this.state;
119115

120116
return (
121-
<div {...restProps} onClick={this.increaseCounter} >
122-
Clicks: {this.state.counter}
123-
<hr />
124-
{children}
125-
</div>
117+
<section>
118+
<div>{count}</div>
119+
<button onClick={this.handleIncrement}>Increment</button>
120+
</section>
126121
);
127122
}
128123
}
129124

130-
export default MyComponent;
125+
export default ClassComponent;
131126
```
132127

133128
---
@@ -159,35 +154,19 @@ interface IUser {
159154
name: string,
160155
}
161156

162-
type UserItemProps = {
163-
item: IUser,
164-
};
165-
166-
const UserItem: React.SFC<UserItemProps> = ({item}) => {
167-
const {name, id} = item;
168-
169-
return (
170-
<div>
171-
<b>{name}</b>
172-
<small>({id})</small>
173-
</div>
174-
);
175-
}
176-
```
177-
178-
```tsx
179-
const UserList = class extends GenericList<IUser> { };
180-
181-
const users = [{
157+
const users: IUser[] = [{
182158
id: 'uuidv4',
183159
name: 'Dude',
184160
}];
185161

162+
const UserList = class extends GenericList<IUser> { };
163+
164+
// notice that "items" and "itemRenderer" will infer "IUser" type and guard type errors
186165
ReactDOM.render(
187166
<UserList
188167
items={users}
189-
itemRenderer={(item) => <UserItem key={item.id} item={item} />} // <- notice that "items" and "itemRenderer" has inferred "IUser" type
190-
>
168+
itemRenderer={(item) => <div key={item.id}>{item.name}</div>}
169+
>
191170
</UserList>
192171
);
193172
```
@@ -223,9 +202,8 @@ class CounterContainer extends React.Component<Props, {}> {
223202
return (
224203
<section>
225204
<h2>{title}</h2>
226-
<input type="number" value={counter} />
205+
<div>{counter}</div>
227206
<button onClick={this.handleIncrement}>Increment</button>
228-
...
229207
</section>
230208
);
231209
}

0 commit comments

Comments
 (0)