ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๐ฏ useLayoutEffect๋ ๋ฌด์์ผ๊น์?
**useLayoutEffect**๋ **DOM(ํ๋ฉด ์์)**์ด ๊ทธ๋ ค์ง๊ธฐ ์ ์ ์คํ๋๋ React ํ ์ด์์.
"๊ทธ๊ฒ ๋ฌด์จ ๋ง์ด์ฃ ?" ํ๊ณ ๊ถ๊ธํ ์ ์์ฃ ?
React์์ ํ๋ฉด์ด ์
๋ฐ์ดํธ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๊ฐ ์์ด์:
- ์ปดํฌ๋ํธ ๋ ๋๋ง → ํ๋ฉด์ ๋ฟ๋ฆด ์ค๋น๋ฅผ ํจ.
- DOM ์ ๋ฐ์ดํธ → ํ๋ฉด์ ์ค์ ๋ก ์์๋ฅผ ๊ทธ๋ ค์.
- useEffect ์คํ → ํ๋ฉด์ด ๋ค ๊ทธ๋ ค์ง ๋ค์์ ์คํ๋ผ์.
- useLayoutEffect ์คํ → ํ๋ฉด์ด ๊ทธ๋ ค์ง๊ธฐ ์ง์ ์ ์คํ๋ผ์.
๐ข useEffect์ useLayoutEffect์ ์ฐจ์ด์ ๋น์
์ฌ๋ฌ๋ถ์ด ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ํ๊ฐ๋ผ๊ณ ์์ํด ๋ณผ๊ฒ์. ๐จ
- **useEffect**๋ ๊ทธ๋ฆผ์ด ์์ ํ ๋ค ๊ทธ๋ ค์ง ํ์ ์์
ํ๋ ๊ฑฐ์์.
→ "๊ทธ๋ฆผ์ ๋ค ๊ทธ๋ฆฌ๊ณ ๋์ ์ก์์ ๋ฃ๋๋ค." - **useLayoutEffect**๋ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง๊ธฐ ์ง์ ์ ์์
ํ๋ ๊ฑฐ์์.
→ "๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ ์ง์ ์ ์บ๋ฒ์ค ํฌ๊ธฐ๋ ์์น๋ฅผ ๋ฏธ๋ฆฌ ์กฐ์ ํ๋ค."
๐ ๏ธ useLayoutEffect ์ฝ๋ ์์
ํ๋ฉด์ ์์๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ ์ ํฌ๊ธฐ๋ ์์น๋ฅผ ์กฐ์ ํ๋ ์์ ๋ฅผ ๋ณด์ฌ๋๋ฆด๊ฒ์.
import React, { useState, useEffect, useLayoutEffect, useRef } from "react";
function BoxExample() {
const [height, setHeight] = useState(0);
const boxRef = useRef();
// useLayoutEffect: ํ๋ฉด์ด ๊ทธ๋ ค์ง๊ธฐ ์ง์ ์ ์คํ๋ผ์.
useLayoutEffect(() => {
const box = boxRef.current;
const boxHeight = box.getBoundingClientRect().height; // ์์ ๋์ด ๊ฐ์ ธ์ค๊ธฐ
setHeight(boxHeight);
console.log("useLayoutEffect ์คํ๋จ! ์์ ๋์ด:", boxHeight);
}, []);
// useEffect: ํ๋ฉด์ด ๋ค ๊ทธ๋ ค์ง ํ์ ์คํ๋ผ์.
useEffect(() => {
console.log("useEffect ์คํ๋จ!");
}, []);
return (
<div>
<div
ref={boxRef}
style={{
width: "200px",
height: "100px",
backgroundColor: "lightblue",
}}
>
์ด ๋ฐ์ค์ ๋์ด: {height}px
</div>
</div>
);
}
export default BoxExample;
๐ ์ฝ๋์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๊น์?
- useLayoutEffect
- ํ๋ฉด์ด ๊ทธ๋ ค์ง๊ธฐ ์ง์ ์ ์คํ๋ฉ๋๋ค.
- getBoundingClientRect()๋ฅผ ์ฌ์ฉํด ์์์ ๋์ด๋ฅผ ๊ฐ์ ธ์์ ์ํ์ ์ ์ฅํด์.
- useEffect
- ํ๋ฉด์ด ๋ค ๊ทธ๋ ค์ง ์ดํ์ ์คํ๋ฉ๋๋ค.
- ๊ฒฐ๊ณผ
- useLayoutEffect๊ฐ ๋จผ์ ์คํ๋๋๊น, ํ๋ฉด์ ๊ทธ๋ ค์ง ๋ ์ด๋ฏธ ์ ํํ ๋์ด ๊ฐ์ด ์ค์ ๋ผ ์์ด์.
- useEffect๋ ๊ทธ ์ดํ์ ์คํ๋๋๊น ํ์ด๋ฐ์ด ๋ฌ๋ผ์.
๐ฆ useLayoutEffect๋ฅผ ์ธ์ ์ฌ์ฉํ ๊น์?
- ํ๋ฉด์ด ๊ทธ๋ ค์ง๊ธฐ ์ ์ ์์์ ํฌ๊ธฐ๋ ์์น๋ฅผ ์ ํํ๊ฒ ๊ณ์ฐํด์ผ ํ ๋
- ์: ์ ๋๋ฉ์ด์ , ๋ ์ด์์ ์กฐ์ , ์คํฌ๋กค ์์น ์ค์ ๋ฑ
- ํ๋ฉด ๊น๋นก์(Flash)์ด๋ ๋ ์ด์์์ด ํ๋ ํ์์ ๋ฐฉ์งํด์ผ ํ ๋
- useEffect๋ ํ๋ฉด์ด ๋ค ๊ทธ๋ ค์ง ํ์ ์คํ๋๋๊น ์ ๊น ๊น๋นก์ผ ์ ์์ด์.
- useLayoutEffect๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋๋ง์ด ๋๋๊ธฐ ์ ์ ๋ฐ๋ก ์์ ์ด ์ ์ฉ๋ผ์.
๐จ ์ฃผ์ํ ์
- useLayoutEffect๋ ๋๊ธฐ์ ์ผ๋ก ์คํ๋ผ์.
→ ํ๋ฉด์ด ๊ทธ๋ ค์ง๊ธฐ ์ง์ ์ ์คํ๋๋๊น ๋ ๋๋ง์ ์ ๊น ๋ง์ ์ ์์ด์. - ๋๋ฌด ๋ง์ ์์ ์ ๋ฃ์ผ๋ฉด ํ๋ฉด์ด ๋๋ ค์ง ์ ์์ผ๋๊น ๊ผญ ํ์ํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ์ธ์!
๐ ํ ์ค ์์ฝ
useLayoutEffect๋ ํ๋ฉด์ด ๊ทธ๋ ค์ง๊ธฐ ์ ์ ์คํ๋ผ์ ๋ ์ด์์์ด๋ ์คํ์ผ์ ์กฐ์ ํ๋ ๋ฐ ์ ์ฉํ React ํ ์ด์์.
728x90
๋ฐ์ํ
'web > react hook' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
useOptimistic (0) | 2024.12.14 |
---|---|
useMemo (2) | 2024.12.14 |
useInsertionEffect (0) | 2024.12.14 |
useImperativeHandle (1) | 2024.12.14 |
useId (0) | 2024.12.14 |
๊ณต์ง์ฌํญ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
- Total
- Today
- Yesterday
๋งํฌ
TAG
- useformstatus
- preconnect
- react
- useRef
- zustand
- ์ ์ฅ์
- image pull
- react dom
- experimental_taintobjectreference
- component
- ๋ฒ ํ
- experimental_taintuniquevalue
- Props
- state
- flushsync
- react hook
- dns-prefetch
- react dom hook
- ์คํ์
- finddomnode
- ์ธ๋ถํฐํธ
- prefetchdns
- private regisirty
- Nextjs
- Store
- ์ํ๊ด๋ฆฌ
- usedeferredvalue
- experimental
- useinsertioneffect
- useid
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
๊ธ ๋ณด๊ดํจ
๋ฐ์ํ
250x250