2024-04-12.md
๐กDIL: ๋ชจ๋ ๋ฆฌ์กํธ ๋ฅ ๋ค์ด๋ธ, 6์ฃผ์ฐจ-5
์คํฐ๋: ์๊ฐ CS, https://github.com/monthly-cs/2024-03-modern-react-deep-dive
์ค๋ ์งํ: ๊ฐ์ธ๊ณต๋ถ
DIL-week6-5_2024-04-12
| DIL ์ฃผ์ฐจ | ๋ฒ์ | ๋ด์ฉ | ์ค๋์ฐจ ์ง๋ | | -------- | ---------- | --------------------------------------------------------- | ----------- | | 6์ฃผ์ฐจ | 10์ฅ, 11์ฅ | ๋ฆฌ์กํธ 17๊ณผ 18 ๋ณ๊ฒฝ ์ฌํญ ์ดํด๋ณด๊ธฐ, Next.js 13๊ณผ ๋ฆฌ์กํธ 18 | 686~693p |
์ค๋ ์ฝ์ ๋ด์ฉ์ markdown์ผ๋ก ๊ฐ๋จํ ๋ฉ๋ชจ
๊ธ์์ผ ์ธ์ถ ์ด์๋ก -> ๋ฒ์ค์์ ์ฝ์๊ธฐ ๋๋ฌธ์ ์์ธ ๋ด์ฉ์ ํ ์์ผ์ ์ ๋ฆฌ ์์ !
๋ฆฌ์กํธ ํ ์์๋ณด๊ธฐ
-
useDeferredValue
-
useTransition๊ณผ useDeferredValue: ๋๋๋ง์ ์ง์ฐ์ํค๋ ์์ ์ ๋ํด ์ํฉ์ ๋ง๊ฒ ์ ํ
- useTransition: ์ํ ์ ๋ฐ์ดํธ ์ฝ๋์ ์ ๊ทผ
- useDeferredValue: ๊ฐ์๋ง ์ ๊ทผ ex) props
export default function Input() { const [text, setText] = useState(""); // ์ฆ์ ๋ณ๊ฒฝ const deferredText = useDeferredValue(text); // ๊ธํ์ง ์์ const list = useMemo(() => { const arr = Array.from({ length: deferredText.length }).map( (_) => deferredText ); return ( <ul> {arr.map((str, index) => ( <li key={index}>{str}</li> ))} </ul> ); }, [deferredText]); // deferredText๋ฅผ ์์กดํ๋ list ๋ฉ๋ชจ์ด์ ์ด์ function handleChange(e: ChangeEvent<HTMLInputElement>) { setText(e.target.value); } return <><input value={text} onChange={handleChange}>{list}</input>; }
-
-
useSyncExternalStore
-
๊ตฌ๋ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ํ๋ฆ, ์ต์ ๋ฐ์ดํฐ ์ฌ์ฉ ๋ณด์ฅ, ์๋ฒ ์ฌ์ด๋ ๋๋๋ง ํธํ์ฑ
import { useSyncExternalStore } from "react"; function subscribe(callback: (this: Window, ev: UIEvent) => void) { window.addEventListener("resize", callback); return () => { window.removeEventListener("resize", callback); }; } function useWindowWidth() { return useSyncExternalStore( subscribe, () => window.innerWidth, () => 0 // ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์ ์ ๊ณต๋๋ ๊ธฐ๋ณธ๊ฐ ); } export default function App() { const windowSize = useWindowWidth(); return ( <> {windowSize} {window.innerWidth} </> ); }
-
-
useInsertionEffect
- CSS-in-js ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- styled-components๊ฐ ์ฌ์ฉํ๋ ์คํ์ผ์ ๋ชจ์์ ์๋ฒ ์ฌ์ด๋ ๋๋๋ง ์ด์ ์
<style>
ํ๊ทธ์ ์ฝ์ ํ๋ ์์ ์ ๋ชจ๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๋๋๋ง์ ์ํฅ์ ๋ฏธ์น ์๋ ์๋ ๋งค์ฐ ๋ฌด๊ฑฐ์ด ์์ - ์๋ฒ ์ฌ์ด๋์์ ์คํ์ผ ์ฝ๋๋ฅผ ์ฝ์ ํ๋ ๊ฒ์ ํ ์์ ํ ์ ์๊ฒ ํจ. - DOM์ด ์ค์ ๋ก ๋ณ๊ฒฝ๋๊ธฐ ์ ์ ๋๊ธฐ์ ์ผ๋ก ์คํ๋จ - ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ์ด์์์ ๊ณ์ฐํ๊ธฐ ์ ์ ์คํ๋ ์ ์๊ฒ ํ๋ค. | ํ | ์คํ ์์ | | --- | --- | | useLayoutEffect | DOM ๋ณ๊ฒฝ ์์ ์ด ๋๋ ์ดํ์ ์คํ | | useInsertionEffect | DOM ๋ณ๊ฒฝ ์์ ์ด์ ์ ์คํ๋๋ค | | useEffect | ์ปดํฌ๋ํธ Commit ์ดํ์ ์คํ๋๋ค |
-
๋ฆฌ์กํธ 18์์ ๋์์ฑ ๋๋๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค๋ฉด, ์ธ๋ถ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์์ฑ ์ง์์ ํ๋์ง ๊ฒํ ๊ฐ ํ์ํ๋ค.