1
- import { useState } from " million/react"
1
+ import { useState } from ' million/react' ;
2
2
3
3
const random = ( max ) => Math . round ( Math . random ( ) * 1000 ) % max ;
4
4
5
- const A = [ "pretty" , "large" , "big" , "small" , "tall" , "short" , "long" , "handsome" , "plain" , "quaint" , "clean" , "elegant" , "easy" , "angry" , "crazy" , "helpful" , "mushy" , "odd" , "unsightly" , "adorable" , "important" , "inexpensive" , "cheap" , "expensive" , "fancy" ] ;
6
- const C = [ "red" , "yellow" , "blue" , "green" , "pink" , "brown" , "purple" , "brown" , "white" , "black" , "orange" ] ;
7
- const N = [ "table" , "chair" , "house" , "bbq" , "desk" , "car" , "pony" , "cookie" , "sandwich" , "burger" , "pizza" , "mouse" ,
8
- "keyboard" ] ;
9
-
5
+ const A = [
6
+ 'pretty' ,
7
+ 'large' ,
8
+ 'big' ,
9
+ 'small' ,
10
+ 'tall' ,
11
+ 'short' ,
12
+ 'long' ,
13
+ 'handsome' ,
14
+ 'plain' ,
15
+ 'quaint' ,
16
+ 'clean' ,
17
+ 'elegant' ,
18
+ 'easy' ,
19
+ 'angry' ,
20
+ 'crazy' ,
21
+ 'helpful' ,
22
+ 'mushy' ,
23
+ 'odd' ,
24
+ 'unsightly' ,
25
+ 'adorable' ,
26
+ 'important' ,
27
+ 'inexpensive' ,
28
+ 'cheap' ,
29
+ 'expensive' ,
30
+ 'fancy' ,
31
+ ] ;
32
+ const C = [
33
+ 'red' ,
34
+ 'yellow' ,
35
+ 'blue' ,
36
+ 'green' ,
37
+ 'pink' ,
38
+ 'brown' ,
39
+ 'purple' ,
40
+ 'brown' ,
41
+ 'white' ,
42
+ 'black' ,
43
+ 'orange' ,
44
+ ] ;
45
+ const N = [
46
+ 'table' ,
47
+ 'chair' ,
48
+ 'house' ,
49
+ 'bbq' ,
50
+ 'desk' ,
51
+ 'car' ,
52
+ 'pony' ,
53
+ 'cookie' ,
54
+ 'sandwich' ,
55
+ 'burger' ,
56
+ 'pizza' ,
57
+ 'mouse' ,
58
+ 'keyboard' ,
59
+ ] ;
10
60
11
61
let nextId = 1 ;
12
62
const generate = ( ) => {
13
63
return {
14
64
id : nextId ++ ,
15
- label : `${ A [ random ( A . length ) ] } ${ C [ random ( C . length ) ] } ${ N [ random ( N . length ) ] } ` ,
16
- }
17
- }
65
+ label : `${ A [ random ( A . length ) ] } ${ C [ random ( C . length ) ] } ${
66
+ N [ random ( N . length ) ]
67
+ } `,
68
+ } ;
69
+ } ;
18
70
19
71
export default function App ( ) {
20
- const [ list , setList ] = useState ( [ ] )
21
- const [ selected , setSelected ] = useState ( 0 )
72
+ const [ list , setList ] = useState ( [ ] ) ;
73
+ const [ selected , setSelected ] = useState ( 0 ) ;
22
74
23
75
const clear = ( ) => {
24
- setSelected ( 0 )
25
- setList ( [ ] )
26
- }
76
+ setSelected ( 0 ) ;
77
+ setList ( [ ] ) ;
78
+ } ;
27
79
28
80
const createArray = ( count ) => {
29
- const l = [ ]
81
+ const l = [ ] ;
30
82
for ( let i = 0 ; i < count ; i ++ ) {
31
- l . push ( generate ( ) )
83
+ l . push ( generate ( ) ) ;
32
84
}
33
- return l
34
- }
85
+ return l ;
86
+ } ;
35
87
36
88
const append = ( count ) => {
37
- setList ( ( prev ) => prev . concat ( createArray ( count ) ) )
38
- }
89
+ setList ( ( prev ) => prev . concat ( createArray ( count ) ) ) ;
90
+ } ;
39
91
40
92
const create1k = ( ) => {
41
- setList ( createArray ( 1000 ) )
42
- }
93
+ setList ( createArray ( 1000 ) ) ;
94
+ } ;
43
95
44
96
const create10k = ( ) => {
45
- setList ( createArray ( 10000 ) )
46
- }
97
+ setList ( createArray ( 10000 ) ) ;
98
+ } ;
47
99
48
100
const append1k = ( ) => {
49
- append ( 1000 )
50
- }
101
+ append ( 1000 ) ;
102
+ } ;
51
103
52
104
const updateEvery10 = ( ) => {
53
105
setList ( ( prev ) => {
54
- const newList = [ ...prev ]
106
+ const newList = [ ...prev ] ;
55
107
for ( let i = 0 ; i < prev . length ; i += 10 ) {
56
- const item = newList [ i ]
57
- newList [ i ] = { id : item . id , label : item . label + " !!!" }
108
+ const item = newList [ i ] ;
109
+ newList [ i ] = { id : item . id , label : item . label + ' !!!' } ;
58
110
}
59
- return newList
60
- } )
61
- }
111
+ return newList ;
112
+ } ) ;
113
+ } ;
62
114
63
115
const swapRows = ( ) => {
64
116
if ( list . length >= 1000 ) {
65
- setList ( ( prev ) => [ prev [ 0 ] , prev [ 998 ] , ...prev . slice ( 2 , 998 ) , prev [ 1 ] , prev [ 999 ] , ...list . length > 1000 ? prev . slice ( 999 ) : [ ] ] )
117
+ setList ( ( prev ) => [
118
+ prev [ 0 ] ,
119
+ prev [ 998 ] ,
120
+ ...prev . slice ( 2 , 998 ) ,
121
+ prev [ 1 ] ,
122
+ prev [ 999 ] ,
123
+ ...( list . length > 1000 ? prev . slice ( 999 ) : [ ] ) ,
124
+ ] ) ;
66
125
}
67
- }
126
+ } ;
68
127
69
- const remove = ( id ) => setList ( list . filter ( ( i ) => i . id !== id ) )
128
+ const remove = ( id ) => setList ( list . filter ( ( i ) => i . id !== id ) ) ;
70
129
71
130
return (
72
131
< div className = "container" >
73
132
< div className = "jumbotron" >
74
133
< div className = "row" >
75
- < div class = "col-md-6" > < h1 > Million React</ h1 > </ div >
134
+ < div class = "col-md-6" >
135
+ < h1 > Million React keyed</ h1 >
136
+ </ div >
76
137
< div class = "col-md-6" >
77
138
< div class = "row" >
78
139
< div class = "col-sm-6 smallpad" >
79
- < button type = "button" class = "btn btn-primary btn-block" id = "run" onClick = { create1k } > Create 1,000 rows</ button >
140
+ < button
141
+ type = "button"
142
+ class = "btn btn-primary btn-block"
143
+ id = "run"
144
+ onClick = { create1k }
145
+ >
146
+ Create 1,000 rows
147
+ </ button >
80
148
</ div >
81
149
< div class = "col-sm-6 smallpad" >
82
- < button type = "button" class = "btn btn-primary btn-block" id = "runlots" onClick = { create10k } > Create 10,000 rows</ button >
150
+ < button
151
+ type = "button"
152
+ class = "btn btn-primary btn-block"
153
+ id = "runlots"
154
+ onClick = { create10k }
155
+ >
156
+ Create 10,000 rows
157
+ </ button >
83
158
</ div >
84
159
< div class = "col-sm-6 smallpad" >
85
- < button type = "button" class = "btn btn-primary btn-block" id = "add" onClick = { append1k } > Append 1,000 rows</ button > </ div >
160
+ < button
161
+ type = "button"
162
+ class = "btn btn-primary btn-block"
163
+ id = "add"
164
+ onClick = { append1k }
165
+ >
166
+ Append 1,000 rows
167
+ </ button >
168
+ </ div >
86
169
< div class = "col-sm-6 smallpad" >
87
- < button type = "button" class = "btn btn-primary btn-block" id = "update" onClick = { updateEvery10 } > Update every 10th row</ button >
170
+ < button
171
+ type = "button"
172
+ class = "btn btn-primary btn-block"
173
+ id = "update"
174
+ onClick = { updateEvery10 }
175
+ >
176
+ Update every 10th row
177
+ </ button >
88
178
</ div >
89
179
< div class = "col-sm-6 smallpad" >
90
- < button type = "button" class = "btn btn-primary btn-block" id = "clear" onClick = { clear } > Clear</ button >
180
+ < button
181
+ type = "button"
182
+ class = "btn btn-primary btn-block"
183
+ id = "clear"
184
+ onClick = { clear }
185
+ >
186
+ Clear
187
+ </ button >
91
188
</ div >
92
189
< div class = "col-sm-6 smallpad" >
93
- < button type = "button" class = "btn btn-primary btn-block" id = "swaprows" onClick = { swapRows } > Swap Rows</ button >
190
+ < button
191
+ type = "button"
192
+ class = "btn btn-primary btn-block"
193
+ id = "swaprows"
194
+ onClick = { swapRows }
195
+ >
196
+ Swap Rows
197
+ </ button >
94
198
</ div >
95
199
</ div >
96
200
</ div >
@@ -99,28 +203,37 @@ export default function App() {
99
203
< table className = "table table-hover table-striped test-data" >
100
204
< tbody >
101
205
{ list . map ( ( item ) => (
102
- < Row key = { item . id } remove = { remove } selected = { selected } setSelected = { setSelected } item = { item } />
206
+ < Row
207
+ key = { item . id }
208
+ remove = { remove }
209
+ selected = { selected }
210
+ setSelected = { setSelected }
211
+ item = { item }
212
+ />
103
213
) ) }
104
214
</ tbody >
105
215
</ table >
106
- < span class = "preloadicon glyphicon glyphicon-remove" aria-hidden = "true" > </ span >
216
+ < span
217
+ class = "preloadicon glyphicon glyphicon-remove"
218
+ aria-hidden = "true"
219
+ > </ span >
107
220
</ div >
108
221
) ;
109
222
}
110
223
111
224
function Row ( { item, remove, selected, setSelected } ) {
112
225
return (
113
- < tr className = { selected === item . id ? " danger" : "" } >
226
+ < tr className = { selected === item . id ? ' danger' : '' } >
114
227
< td class = "col-md-1" > { item . id } </ td >
115
228
< td class = "col-md-4" >
116
229
< a onClick = { ( ) => setSelected ( item . id ) } > { item . label } </ a >
117
230
</ td >
118
231
< td class = "col-md-1" >
119
- < a onClick = {
120
- ( ) => remove ( item . id )
121
- } > < span class = "glyphicon glyphicon-remove" aria-hidden = "true" > </ span > </ a >
232
+ < a onClick = { ( ) => remove ( item . id ) } >
233
+ < span class = "glyphicon glyphicon- remove" aria-hidden = "true" > </ span >
234
+ </ a >
122
235
</ td >
123
236
< td class = "col-md-6" />
124
237
</ tr >
125
- )
126
- }
238
+ ) ;
239
+ }
0 commit comments