Skip to content

Commit 29f8838

Browse files
committed
useCallback&useMemo(examples): completed
1 parent 9a3dc00 commit 29f8838

File tree

4 files changed

+92
-2
lines changed

4 files changed

+92
-2
lines changed

src/App.jsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
// COMPONENTS
22
import Greeting from "./components/Basics/Greeting";
3-
import Counter from "./components/Hooks/useStateHook/Counter";
3+
// import Counter from "./components/Hooks/useStateHook/Counter";
44
import Form from "./project/Form";
55
import ThemeToggler from "./project/ThemeToggler";
66
import HandlingForm from "./components/Hooks/useRefHook/HandlingForm";
7+
import ChangeTheme from "./components/Hooks/useMemo/ChangeTheme";
8+
import DisplayList from "./components/Hooks/useCallback/DisplayList";
79
// TRY IT YOURSELF COMPONENTS
810
import FormDetails from "./tryityourself/Akash/FormDetails";
911
import RandomBackground from "./tryityourself/Akash/RandomBackground";
1012

1113
const App = () => {
12-
return <RandomBackground />;
14+
return <DisplayList />;
1315
};
1416

1517
export default App;
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { useCallback, useState } from "react";
2+
import List from "./List";
3+
4+
const DisplayList = () => {
5+
const [number, setNumber] = useState(1);
6+
const [dark, setDark] = useState(false);
7+
8+
// const getItems = () => {
9+
// return [number, number + 1, number + 2];
10+
// };
11+
12+
const getItems = useCallback(() => {
13+
return [number, number + 1, number + 2];
14+
}, [number]);
15+
16+
const theme = {
17+
backgroundColor: dark ? "black" : "white",
18+
color: dark ? "white" : "black",
19+
};
20+
21+
return (
22+
<div style={theme}>
23+
<input
24+
type="number"
25+
value={number}
26+
onChange={(e) => setNumber(parseInt(e.target.value))}
27+
></input>
28+
<button onClick={() => setDark((prevDark) => !prevDark)}>
29+
Change theme
30+
</button>
31+
<List getItems={getItems} />
32+
</div>
33+
);
34+
};
35+
36+
export default DisplayList;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { useEffect, useState } from "react";
2+
3+
const List = ({ getItems }) => {
4+
const [items, setItems] = useState([]);
5+
6+
useEffect(() => {
7+
setItems(getItems());
8+
9+
console.log("Updating items");
10+
}, [getItems]);
11+
12+
return items.map((item, index) => <div key={index}>{item}</div>);
13+
};
14+
15+
export default List;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { useMemo, useState } from "react";
2+
3+
const ChangeTheme = () => {
4+
const [number, setNumber] = useState(0);
5+
const [dark, setDark] = useState(false);
6+
7+
const doubleNumber = useMemo(() => {
8+
return slowFunction(number);
9+
}, [number]);
10+
11+
const themeStyles = {
12+
backgroundColor: dark ? "black" : "white",
13+
color: dark ? "white" : "black",
14+
};
15+
16+
function slowFunction(num) {
17+
console.log("Calling slow function");
18+
for (let i = 0; i <= 1000000000; i++) {}
19+
return num * 2;
20+
}
21+
22+
return (
23+
<>
24+
<input
25+
type="number"
26+
value={number}
27+
onChange={(e) => setNumber(e.target.value)}
28+
></input>
29+
<button onClick={() => setDark((prevDark) => !prevDark)}>
30+
Change theme
31+
</button>
32+
<div style={themeStyles}>{doubleNumber}</div>
33+
</>
34+
);
35+
};
36+
37+
export default ChangeTheme;

0 commit comments

Comments
 (0)