Skip to content

Commit 186bd84

Browse files
committed
ref and re renders
1 parent 820b191 commit 186bd84

File tree

3 files changed

+98
-6
lines changed

3 files changed

+98
-6
lines changed

src/classes/UserSearch.tsx

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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;

src/index.tsx

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
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";
45
const App = () => {
6+
const count = useRef(0);
7+
8+
useEffect(() => {
9+
count.current = count.current + 1;
10+
});
11+
512
return (
613
<div>
7-
<EventComponent />
14+
<UserSearch />
15+
<h1>Render Count: {count.current}</h1>
816
</div>
917
);
1018
};
11-
12-
ReactDom.render(<App />, document.querySelector("#root"));
19+
createRoot(document.querySelector("#root")!).render(<App />);

src/refs/UserSearch.tsx

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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;

0 commit comments

Comments
 (0)