UNPKG

1.91 kBJavaScriptView Raw
1const { List } = Immutable;
2
3class Example extends React.Component {
4
5 constructor(props) {
6 super(props);
7
8 this.state = {
9 items: List(),
10 current: 'square',
11 };
12
13 this.handleAdd = () => {
14 const { items, current } = this.state;
15 this.setState({
16 items: items.push(current),
17 current: current === 'circle' ? 'square' : 'circle',
18 });
19 };
20
21 }
22
23 render() {
24 const { items, current } = this.state;
25 return (
26 <div className="example">
27 <div className="add-section">
28 <div className={current}/>
29 <button
30 type="button"
31 onClick={this.handleAdd}
32 className="add-button btn btn-secondary"
33 >
34 Add { current }
35 </button>
36 </div>
37
38 <ItemList items={items.filter(i => i === 'square')}/>
39 <ItemList2 items={items.filter(i => i === 'circle')}/>
40 </div>
41 );
42 }
43}
44
45var ItemsListRenders = 0;
46var ItemsList2Renders = 0;
47
48const mapItem = (item) => <div className={item}/>;
49
50class ItemList extends React.PureComponent {
51
52 componentWillUpdate() {
53 ItemsListRenders += 1;
54 }
55
56 render() {
57 const items = this.props.items.map(mapItem);
58 return (
59 <div className="item-list">
60 <div className="counter">
61 Render count: { ItemsListRenders }
62 </div>
63 <div className="items">
64 {items}
65 </div>
66 </div>
67 );
68 }
69}
70
71class ItemList2 extends ImmutablePureComponent {
72
73 componentWillUpdate() {
74 ItemsList2Renders += 1;
75 }
76
77 render() {
78 const items = this.props.items.map(mapItem);
79 return (
80 <div className="item-list">
81 <div className="counter">
82 Render count: { ItemsList2Renders }
83 </div>
84 <div className="items">
85 {items}
86 </div>
87 </div>
88 );
89 }
90}
91
92ReactDOM.render(<Example/>, document.getElementById('example'));
93
\No newline at end of file