Today, What I learned?
์์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค๊ฐ null๊ฐ์ด ํฌํจ๋์ด์ ์๋ ๋๋ ๊ธฐ๋ฅ์ด ์ ๋๋(!) ์ผ์ด ๋ฐ์ํ๋ค.
๋ฐ๊ฒฌํ์ ๋ถ์ด ๋ฐ๋ก ํด๊ฒฐํด ์ฃผ์ จ์ง๋ง, ๋ง์นจ ๊ทธ ๋ถ๋ถ์ด useEffect๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ์ด๊ณ ..
๋ด๊ฐ useEffect์ ์คํ ์์ ์ ๋ํด์ ์๋ชป ์๊ณ ์์๋ ๊ฒ ๊ฐ์ ์ ๋ฆฌํ๋ค!
useEffect์ ์คํ ์์
๋๋ ๊ธฐ์กด์ useEffect๊ฐ ์ ์ผ ๋จผ์ ์คํ๋๋ค๊ณ ์๊ฐํ์๋๋ฐ, (์ ํํ ์์๋์ง๋?..๐ค)
useEffect
๊ฐ์ ์ฌ์ด๋ ์ดํํธ๋ jsx๊ฐ ๋ค์ด์๋ return๋ฌธ์ด ๋๋๊ณ ์คํ๋๋ค.
์๋์ ๊ฐ์ด ์ฝ์์ ์ถ๊ฐํด์ ํ์ธํด๋ณด๋ ๋ค์ ์๊ฒ ๋ ๊ฒ๊ณผ ๊ฐ์ด ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋๋ return๋ฌธ์ด ๋จผ์ ์คํ๋๊ณ useEffect์ ์ฝ์์ด ์ฐํ๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
const Home = () => {
console.log('๋ ๋๋ง ์์!');
useEffect(() => {
console.log('useEffect');
}, []);
return (
<Container>
{console.log('์ปดํฌ๋ํธ ์')}
<Header />
<TodoForm />
<TodoList isActive={true} />
<TodoList isActive={false} />
</Container>
);
};
๋ฆฌ๋ ๋๋ง ๋ ๋
์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง์ ์ด๋ฐ ์กฐ๊ฑด์ผ ๋ ๋ฐ์๋๋ค.
- ์ปดํฌ๋ํธ์์ state๊ฐ ๋ณ๊ฒฝ๋์์ ๋
- ์ปดํฌ๋ํธ๊ฐ ๋ด๋ ค๋ฐ์ props๊ฐ ๋ณ๊ฒฝ๋์์ ๋
- ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๊ฒฝ์ฐ
์๋์ ๊ฐ์ ์ปดํฌ๋ํธ๊ฐ ์๋ค๊ณ ํด๋ณด์.
const Test = ({ isActive }: PropsType) => {
const [text, setText] = useState<string>('');
const [count, setCount] = useState<Number>(0);
console.log('text', text);
console.log('count', count);
useEffect(() => {
console.log('useEffect!!');
setText('Hi');
setCount(10);
console.log('useEffect end');
}, [todos]);
return (
<Wrap>
{console.log('์ปดํฌ๋ํธ ์')}
...
์ด๋ฐ ์์ผ๋ก ์ฝ์์ด ์ฐํ๊ฒ ๋๋ค.
์ ๋ ๋ฒ์ฉ ์ฐํ๋ํ๋ฉด ์ ๊น ํ ์คํธ๋ฅผ ์ํด ์์ ํ ์ด ์ปดํฌ๋ํธ๊ฐ ํ ํ์ด์ง ์ปดํฌ๋ํธ์์ ๋ ๋ฒ ์ฐ์ด๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค ๐
๋ ๋ฒ ์ฐํ ๊ฒ์ ๋ฌด์ํ๊ณ ..
์ฝ๋ ์ต์๋จ๋ถํฐ ์ฐจ๋ก๋ก ์ฝ์์ ์ฐ๊ณ ์๋ค.
์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋จ ์ฝ๋ -> return ๋ฌธ ๋ด๋ถ -> useEffect ์์๋ก ์ฐํ๊ณ ์๋ค.
useEffect
์ ์์๊ณผ ๋ ์ฝ์์ด ์ฐจ๋ก๋ก ์ฐํ๊ณ text์ count ์ฝ์์ด ๋ค์ ์ฐํ๋ ๊ฒ์ ๋ณผ ์ ์๋๋ฐ,
setState
๋ ๋น๋๊ธฐ ํจ์์ด๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง์ ์คํ์ด ๋๊ณ ,
ํ๋์ ์ค์ฝํ ์์ ์ฌ๋ฌ ๊ฐ ์๋ค๋ฉด ํ ๋ฒ์ ๊ฐ์ด ์ฒ๋ฆฌ๊ฐ ๋๋ค. (Batching์ด๋ผ๊ณ ํ๋ค)
์ฆ ์์์๋ setText
์ setCount
๊ฐ ์ฐ๋ฌ์ ์๊ธฐ ๋๋ฌธ์ ํ๊บผ๋ฒ์ ๋ชจ์์ state๋ฅผ ๋ณ๊ฒฝํ ํ ๋ฆฌ๋ ๋๋ง ํ๋ค.
๋ฆฌ๋ ๋๋ง์ด ๋์์ผ๋ ๋ค์ ์ฝ๋ ์๋จ๋ถํฐ ์ฝ์์ด ์ฐํ๋๋ฐ, ๋ณ๊ฒฝ๋ state๋ก ์ฐํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด์ ์ ์ฝ๋๋ ๋ฌด์์ด ๋ฌธ์ ์๋?
์ด์ ์์ ํ๋ ๊ฒ์ ํธํฐ์์ ์นดํ ๊ณ ๋ฆฌ ์ด๋ฆ์ ํด๋ฆญํ์ ๋,
ํ์ด์ง๋ก ๋์ด๊ฐ์ ํด๋น ์นดํ ๊ณ ๋ฆฌ์ ํญ์ ๋ฐ๋ก ํ์ฑํ ์์ผ์ค์ผ ํ๋ ๋ถ๋ถ์ด์๋ค.
์๋๋ ๊ธฐ์กด์ ์ฝ๋.
const { state: categoryFromFooter } = useLocation();
// ํธํฐ์์ ํด๋ฆญํ ๊ฒฝ์ฐ ์นดํ
๊ณ ๋ฆฌ ์ง์
useEffect(() => {
setCategory(categoryFromFooter);
}, [categoryFromFooter]);
์ด ์ฝ๋๋ return๋ฌธ ์ดํ์ ์คํ๋๋ฉด์ category๋ฅผ ๋ค์ ์ค์ ํ๊ธฐ ๋๋ฌธ์,
๋ง์ฝ ํธํฐ์์ ํด๋ฆญํด์ ์ด ํ์ด์ง๋ก ๋์ด์จ๊ฒ ์๋์๋ค๋ฉด, ๋ฉ์ฉกํ ์ง์ ๋์ด ์๋ category๊ฐ null ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋๋ฉฐ ๊ธฐ๋ฅ์ด ๋์ํ์ง ์๋ ๋ฌธ์ ๊ฐ ์์๋ค.
๊ทธ๋์ ์์ ๋ ๋ถ๋ถ์ ์ด๋ ๋ค.
ํธํฐ์์ ์จ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ง setCategory
๋ฅผ ํ๋๋ก ๋ณ๊ฒฝ๋์๋ค.categoryFromFooter
์์ฒด๊ฐ ํธํฐ์์ ์์ ๊ฒฝ์ฐ๋ง ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ์ด์ง์์ ์ฌ ๋๋ ๋ชจ๋ null์ด๋ค.
const { state: categoryFromFooter } = useLocation();
// ํธํฐ์์ ํด๋ฆญํ ๊ฒฝ์ฐ ์นดํ
๊ณ ๋ฆฌ ์ง์
useEffect(() => {
if (categoryFromFooter !== null) {
setCategory(categoryFromFooter);
}
}, [categoryFromFooter]);
useEffect
์ ์คํ ์์์ ๋ํด์ ๋ค์ ํ๋ฒ ๋์ง์ผ๋ฉฐ ๊ธฐ๋ณธ์ ์ถฉ์คํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ํ๋ฃจ!...
'๐ Studying > ๐ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ํ์ด์ด๋ฒ ์ด์ค ํ๋กํ ์ด๋ฏธ์ง ์ฉ๋ ์ต์ ํ (0) | 2023.02.27 |
---|---|
[React] React.memo, useMemo, useCallback (0) | 2023.02.24 |
๋ง์ดํ์ด์ง ๋ฒ๊ทธ, ์ ๋ณด ๋ณ๊ฒฝ ํ์ธ ์ ํจ์ฑ ๊ฒ์ฌ ๐ค (0) | 2023.02.21 |
[React] React.lazy ์ Suspense (0) | 2023.02.20 |
[React] ํ๋ก์ ํธ ๋ฆฌ์คํธ ํํฐ๋ง ์ฌ์ (2) - 3์ค ์ค์ฒฉ ๊ฐ์ฒด (0) | 2023.02.17 |
Comment