Skip to content

Commit 57726dc

Browse files
committed
Useeffet example 4
1 parent c6eb1cf commit 57726dc

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
* Example: WindowResizeListener
3+
*
4+
* Explanation:
5+
* - Demonstrates subscribing to global events (window resize) inside useEffect.
6+
* - Teaches why cleanup is required to prevent leaks.
7+
* - Common real-world pattern: resize listeners, keyboard shortcuts, scroll tracking.
8+
*/
9+
import { useEffect, useState } from "react";
10+
11+
export default function WindowResizeListener() {
12+
const [size, setSize] = useState({ w: window.innerWidth, h: window.innerHeight });
13+
14+
useEffect(() => {
15+
const handler = () => setSize({ w: window.innerWidth, h: window.innerHeight });
16+
window.addEventListener("resize", handler);
17+
return () => window.removeEventListener("resize", handler);
18+
}, []);
19+
20+
return <p>Window size: {size.w} × {size.h}</p>;
21+
}

src/hooks/useEffect/useEffect.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import BasicLog from "./examples/01_BasicLog";
1010
import EffectCleanup from "./examples/02_EffectCleanup";
1111
import DependencyArray from "./examples/03_DependencyArray";
12-
// import WindowResizeListener from "./examples/WindowResizeListener";
12+
import WindowResizeListener from "./examples/04_WindowResizeListner";
1313
// import FetchData from "./examples/FetchData";
1414
// import MultipleEffects from "./examples/MultipleEffects";
1515
// import EffectVsLayoutEffect from "./examples/EffectVsLayoutEffect";
@@ -51,9 +51,9 @@ export default function UseEffectShowcase() {
5151
<DependencyArray />
5252
</Demo>
5353

54-
{/* <Demo title="4) WindowResizeListener — global event subscription">
54+
<Demo title="4) WindowResizeListener — global event subscription">
5555
<WindowResizeListener />
56-
</Demo> */}
56+
</Demo>
5757

5858
{/* <Demo title="5) FetchData — async request with cleanup">
5959
<FetchData />

0 commit comments

Comments
 (0)