์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- react
- CSS
- ์คํฌ๋กค๊ตฌํ
- HTML
- react native
- Redux
- ์ฝํ
- TypeScript
- JavaScript
- ContextAPI
- ํ์ด์ฌ
- ๋ฐฑ์ค
- nextjs
- dart
- router
- Python
- VanilaJS
- ์ฃผ์์ฐฝํด์
- Frontend
- Today
- Total
JiSoo's Devlog
[์ฐ์ํ ํ์ ์คํฌ๋ฆฝํธ] 9์ฅ ๋ณธ๋ฌธ
๐ ๋ฆฌ์กํธ ํ
useState
๋ฆฌ์กํธ ํจ์ ์ปดํฌ๋ํธ์์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด useState ํ ์ ํ์ฉํ ์ ์๋ค.
function useState<S>(
initialstate๏ผ S ! (() => S)
)๏ผ [S, Dispatch<SetStateAction<S»];
type Dispatch<A> = (value๏ผ A) => void;
type SetStateAction<S> = S ! ((prevState๏ผ S) => S);
useState๊ฐ ๋ฐํํ๋ ํํ์ ์ฒซ ๋ฒ์งธ ์์๋ ์ ๋ค๋ฆญ์ผ๋ก ์ง์ ํ S ํ์ ์ด๊ณ ๋ ๋ฒ์งธ ์์๋ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๋ Dispatch ํ์ ํจ์
์์กด์ฑ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ํ
useEffect์ useLayoutEffect
๋ ๋๋ง ์ดํ ๋ฆฌ์กํธ ํจ์ ์ปดํฌ๋ํธ์ ์ด๋ค ์ผ์ ์ํํด์ผ ํ๋์ง ์๋ ค์ฃผ๊ธฐ ์ํด useEffectํ ์ ํ์ฉํ ์ ์๋ค.
function useEffect(effect๏ผ EffectCaUback, deps?๏ผ DependencyList)๏ผ void;
type DependencyList = ReadonlyArray<any>;
type EffectCaUback = () => void | Destructor;
useEffect์ ์ฒซ ๋ฒ์งธ ์ธ์์ด์ effect์ ํ์ ์ธ EffectCallback์ Destructor๋ฅผ ๋ฐํํ๊ฑฐ๋ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋ ํจ์์ด๋ค.
Promise ํ์ ์ ๋ฐํํ์ง ์์ผ๋ฏ๋ก useEffect์ ์ฝ๋ฐฑ ํจ์์๋ ๋น๋๊ธฐ ํจ์๊ฐ ๋ค์ด๊ฐ ์ ์๋ค.
๋ ๋ฒ์งธ ์ธ์์ธ deps๋ ์ต์ ๋ํ๊ฒ ์ ๊ณต๋๋ฉฐ effect๊ฐ ์ํ๋๊ธฐ ์ํ ์กฐ๊ฑด์ ๋์ดํ๋ค.
์๋ฅผ ๋ค์ด deps ๋ฐฐ์ด์ ์์๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์คํํ๋ค๋ ์์ผ๋ก ์ฌ์ฉํ๋ค.
useEffect๋ deps๊ฐ ๋ณ๊ฒฝ๋์๋์ง๋ฅผ ์์ ๋น๊ต๋ก๋ง ํ๋จํ๊ธฐ ๋๋ฌธ์, ์ค์ ๊ฐ์ฒด ๊ฐ์ด ๋ฐ๋์ง ์์๋๋ผ๋ ๊ฐ์ฒด์ ์ฐธ์กฐ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ฝ๋ฐฑ ํจ์๊ฐ ์คํ๋๋ค.
์์ ๋น๊ต
๊ฐ์ฒด๋ ๋ฐฐ์ด ๊ฐ์ ๋ณตํฉ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ ๋น๊ตํ ๋ ๋ด๋ถ์ ๊ฐ ์์๋ ์์ฑ์ ์ฌ๊ท์ ์ผ๋ก ๋น๊ตํ์ง ์๊ณ , ํด๋น ๊ฐ๋ค์ ์ฐธ์กฐ๋ ๊ธฐ๋ณธ ํ์ ๊ฐ๋ง์ ๋น๊ตํ๋ ๊ฒ์ ๋งํ๋ค.
deps๊ฐ ๋น ๋ฐฐ์ด์ด๋ผ๋ฉด useEffect์ ์ฝ๋ฐฑ ํจ์๋ ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ ๋๋ง๋ ๋๋ง ์คํ๋๋ฉฐ, ์ด๋์ Destructor๏ผํด๋ฆฐ์ ํจ์)๋ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ํด์ ๋ ๋ ์คํ๋๋ค.
deps ๋ฐฐ์ด์ด ์กด์ฌํ๋ค๋ฉด ๋ฐฐ์ด์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค Destructor๊ฐ ์คํ๋๋ค.
useLayoutEffect ํ ์ญ์ useEffect์ ์ญํ ์ฐจ์ด๋ง ์๋ค.
type DependencyList = ReadonlyArray<any>;
function useLayoutEffect(effect๏ผ EffectCaUback, deps?๏ผ DependencyList)๏ผ void;
useLayoutEffect๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ฉด์ ํด๋น ์ปดํฌ๋ํธ๊ฐ ๊ทธ๋ ค์ง๊ธฐ ์ ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ฒ์งธ ๋ ๋๋ง ๋ ๋น ์ด๋ฆ์ด ๋จ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
useMemo์ useCallback
๋ ๊ฐ ๋ชจ๋ ์ด์ ์ ์์ฑ๋ ๊ฐ ๋๋ ํจ์๋ฅผ ๊ธฐ์ตํ๋ฉฐ ๋์ผํ ๊ฐ๊ณผ ํจ์๋ฅผ ๋ฐ๋ณตํด์ ์์ฑํ์ง ์๋๋ก ํด์ฃผ๋ ํ ์ด๋ค.
์ด๋ค ๊ฐ์ ๊ณ์ฐํ๋ ๋ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ๋๋ ๋ ๋๋ง์ด ์์ฃผ ๋ฐ์ํ๋ form์์ useMemo๋ useCallback์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
type DependencyList = ReadonlyArray<any>;
function useMemo<T>(factory: () => T, deps: DependencyList | undefined): T;
function useCallback<T extends (...args: any[]) => any>(callback: T, deps:
DependencyList): T;
๋ ํ ๋ชจ๋ ์ ๋ค๋ฆญ์ ์ง์ํ๊ธฐ ์ํด T ํ์ ์ ์ ์ธํด ์ฃผ๋ฉฐ useCallback์ ํจ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ ๋ค๋ฆญ์ ๊ธฐ๋ณธ ํ์ ์ ์ง์ ํ๊ณ ์๋ค.
๋ ํ ์ deps ๋ฐฐ์ด์ ๊ฐ๊ณ ์์ผ๋ฉฐ ํด๋น ์์กด์ฑ์ด ๋ณ๊ฒฝ๋๋ฉด ๊ฐ์ ๋ค์ ๊ณ์ฐํ๊ฒ ๋๋ค.
๋ชจ๋ ๊ฐ๊ณผ ํจ์๋ฅผ useMemo์ useCallback์ ์ฌ์ฉํด ๊ณผ๋ํ๊ฒ ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ฉด ์ปดํฌ๋ํธ์ ์ฑ๋ฅ ํฅ์์ด ๋ณด์ฅ๋์ง ์์ ์ ์๋ค.
useRef
<input /> ์์์ ํฌ์ปค์ค ์ค์ ํ๊ฑฐ๋ ํน์ ์ปดํฌ๋ํธ์ ์์น๋ก ์คํฌ๋กค ๋ฑ DOM์ ์ง์ ์ ํํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ด๋ ๋ฆฌ์กํธ์ useRef ์ฌ์ฉ
useRef๋ ์ธ ์ข ๋ฅ์ ํ์ ์ ์๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ๋ฃ์ด์ฃผ๋ ์ธ์ ํ์ ์ ๋ฐ๋ผ ๋ฐํ๋๋ ํ์ ์ด ๋ฌ๋ผ์ง๋ค.
๋ฆฌ์กํธ ์ปดํฌ๋ํธ์์ ref๋ฅผ prop์ผ๋ก ์ ๋ฌํ๋ ค๋ฉด forwardRef๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
interface Props {
name๏ผ string;
}
const Mylnput = forwardRef<HTMLInputElement, Props>((props, ref) => {
return (
<div>
<label>{props .name}</label>
<input ref = {ref} />
</div>
);
});
uselmperativeHandle
uselmperativeHandle์ ForwardRefRenderFunction๊ณผ ํจ๊ป ์ธ ์ ์๋ ํ ์ด๋ค.
์ด ํ ์ ์ฌ์ฉํ๋ฉด ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ref๋ฅผ ํตํด ์์ ์ปดํฌ๋ํธ์์ ์ ์ํ ์ปค์คํฐ๋ง์ด์ง๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๊ฒ ๋๋ค.
์ด์ ๋ฐ๋ผ ์์ ์ปดํฌ๋ํธ๋ ๋ด๋ถ ์ํ๋ ๋ก์ง์ ๊ด๋ฆฌํ๋ฉด์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๋ค.
useRef์ ์ฌ๋ฌ ๊ฐ์ง ํน์ฑ
useRef๋ ์์ ์ปดํฌ๋ํธ๋ฅผ ์ ์ฅํ๋ ๋ณ์๋ก ํ์ฉํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
- useRef๋ก ๊ด๋ฆฌ๋๋ ๋ณ์๋ ๊ฐ์ด ๋ฐ๋์ด๋ ์ปดํฌ๋ํธ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ์ง ์๋๋ค.
- ๋ฆฌ์กํธ ์ปดํฌ๋ํธ ์ํ๋ ์ํ ๋ณ๊ฒฝ ํจ์๋ฅผ ํธ์ถํ๊ณ ๋ ๋๋ง๋ ์ดํ์ ์ ๋ฐ์ดํธ๋ ์ํ๋ฅผ ์กฐํํ ์ ์๋ค.
๐ฎ ์ปค์คํ ํ
๋๋ง์ ํ ๋ง๋ค๊ธฐ
์ปค์คํ ํ ์ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๋ด์์๋ง ์ฌ์ฉํ ์ ์๋๋ฐ ์ด๋ฆ์ ๋ฐ๋์ use๋ก ์์ํด์ผ ํ๋ค.
import { useState } from "react";
const useinput = (initialvalue) => {
const [value, setValue] = useState(initialvalue);
const onChange = (e) => {
setValue(e .target .value);
};
return { value, onChange };
};
'Frontend > Typescript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฐ์ํ ํ์ ์คํฌ๋ฆฝํธ] 8์ฅ (8) | 2025.06.06 |
---|---|
[์ฐ์ํ ํ์ ์คํฌ๋ฆฝํธ] 7์ฅ (1) | 2025.06.05 |
[์ฐ์ํ ํ์ ์คํฌ๋ฆฝํธ] 6์ฅ (1) | 2025.05.29 |
[์ฐ์ํ ํ์ ์คํฌ๋ฆฝํธ] 5์ฅ (4) | 2025.05.28 |
[์ฐ์ํ ํ์ ์คํฌ๋ฆฝํธ] 4์ฅ (2) | 2025.05.23 |