File tree Expand file tree Collapse file tree 3 files changed +98
-6
lines changed Expand file tree Collapse file tree 3 files changed +98
-6
lines changed Original file line number Diff line number Diff line change
1
+ import { Component } from "react" ;
2
+
3
+ interface User {
4
+ name : string ;
5
+ age : number ;
6
+ }
7
+ interface UserSearchProps {
8
+ users : User [ ] ;
9
+ }
10
+
11
+ interface UserSearchState {
12
+ name : string ;
13
+ user : User | undefined ;
14
+ }
15
+ class UserSearch extends Component < UserSearchProps > {
16
+ state : UserSearchState = {
17
+ name : "" ,
18
+ user : undefined ,
19
+ } ;
20
+
21
+ onClick = ( ) => {
22
+ const foundUser = this . props . users . find (
23
+ ( user ) => user . name === this . state . name
24
+ ) ;
25
+ this . setState ( { user : foundUser } ) ;
26
+ } ;
27
+ render ( ) {
28
+ const { name, user } = this . state ;
29
+ return (
30
+ < div >
31
+ User Search
32
+ < input
33
+ value = { name }
34
+ onChange = { ( e ) => this . setState ( { name : e . target . value } ) }
35
+ />
36
+ < button onClick = { this . onClick } > Find User</ button >
37
+ < div >
38
+ { user && user . name }
39
+ { user ?. age }
40
+ </ div >
41
+ </ div >
42
+ ) ;
43
+ }
44
+ }
45
+
46
+ export default UserSearch ;
Original file line number Diff line number Diff line change 1
- import ReactDom from "react-dom" ;
2
- import EventComponent from "./events/EventComponent" ;
3
-
1
+ import { useEffect , useRef } from "react" ;
2
+ import { createRoot } from "react-dom/client" ;
3
+ // import EventComponent from "./events/EventComponent";
4
+ import UserSearch from "./refs/UserSearch" ;
4
5
const App = ( ) => {
6
+ const count = useRef ( 0 ) ;
7
+
8
+ useEffect ( ( ) => {
9
+ count . current = count . current + 1 ;
10
+ } ) ;
11
+
5
12
return (
6
13
< div >
7
- < EventComponent />
14
+ < UserSearch />
15
+ < h1 > Render Count: { count . current } </ h1 >
8
16
</ div >
9
17
) ;
10
18
} ;
11
-
12
- ReactDom . render ( < App /> , document . querySelector ( "#root" ) ) ;
19
+ createRoot ( document . querySelector ( "#root" ) ! ) . render ( < App /> ) ;
Original file line number Diff line number Diff line change
1
+ import { useState , useRef , useEffect } from "react" ;
2
+
3
+ const users = [
4
+ { name : "Sarah" , age : 20 } ,
5
+ { name : "Alex" , age : 20 } ,
6
+ { name : "Michael" , age : 20 } ,
7
+ ] ;
8
+ const UserSearch : React . FC = ( ) => {
9
+ const inputRef = useRef < HTMLInputElement | null > ( null ) ;
10
+ const [ name , setName ] = useState ( "" ) ;
11
+ const [ user , setUser ] = useState < { name : string ; age : number } | undefined > ( ) ;
12
+
13
+ useEffect ( ( ) => {
14
+ inputRef . current ?. focus ( ) ;
15
+ } , [ ] ) ;
16
+
17
+ const onClick = ( ) => {
18
+ const foundUser = users . find ( ( user ) => user . name === name ) ;
19
+ setUser ( foundUser ) ;
20
+ } ;
21
+
22
+ return (
23
+ < div >
24
+ User Search
25
+ < input
26
+ ref = { inputRef }
27
+ value = { name }
28
+ onChange = { ( e ) => setName ( e . target . value ) }
29
+ />
30
+ < button onClick = { onClick } > Find User</ button >
31
+ < div >
32
+ { user && user . name }
33
+ { user ?. age }
34
+ </ div >
35
+ </ div >
36
+ ) ;
37
+ } ;
38
+
39
+ export default UserSearch ;
You can’t perform that action at this time.
0 commit comments