์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๋ฐฑ์ค 2503 javascript
- ๋ฐฑ์ค 2503 nodejs
- ๋ฐฑ์ค 11047 javascript
- ๋ฐฑ์ค 1449 ํ์ ์คํฌ๋ฆฝํธ
- ๋ฐฑ์ค 2503 ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐฑ์ค 1449 ๋ ธ๋
- ๋ฐฑ์ค 4796 nodejs
- ๋ฐฑ์ค 1018 ํ์ ์คํฌ๋ฆฝํธ
- ๋ฐฑ์ค 4796 ์บ ํ
- ๋ฐฑ์ค 11047 ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐฑ์ค 1449 ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐฑ์ค 1018 typescript
- ๋ฐฑ์ค 11047 typescript
- ๋ฐฑ์ค 2503 typescript
- ๋ฐฑ์ค 1449 nodejs
- ๋ฐฑ์ค 1449
- ๋ฐฑ์ค 1018 ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐฑ์ค 4796 javascript
- ๋ฐฑ์ค 1018 javascript
- ๋ฐฑ์ค 11047 ํ์ ์คํฌ๋ฆฝํธ
- ๋ฐฑ์ค 1018 nodejs
- CSS
- ๋ฐฑ์ค 4796 ํ์ ์คํฌ๋ฆฝํธ
- ๋ฐฑ์ค 1449 javascript
- ๋ฐฑ์ค 11047 nodejs
- ๋ฐฑ์ค 4796 ์๋ฐ์คํฌ๋ฆฝํธ
- JavaScript
- ๋ฐฑ์ค 2503 ํ์ ์คํฌ๋ฆฝํธ
- ์๊ณ ๋ฆฌ์ฆ
- ๋ฐฑ์ค 10448 javascript
- Today
- Total
POTATO THAT WANT TO BE HUMAN
[React] LiftCycle๊ณผ useEffect ๋ณธ๋ฌธ
๐ ๋ฆฌ์กํธ์ ๋ผ์ดํ์ฌ์ดํด
๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ view๋ฅผ ์ค์ฌ์ผ๋ก ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ์๋ ๋ผ์ดํ์ฌ์ดํด(์๋ช ์ฃผ๊ธฐ)๊ฐ ์กด์ฌํ๋ค. ์ปดํฌ๋ํธ์ ์๋ช ์ ๋ณดํต ํ์ด์ง์์ ๋ ๋๋ง๋๊ธฐ ์ ์ธ ์ค๋น๊ณผ์ ์์ ์์ํ์ฌ ํ์ด์ง์์ ์ฌ๋ผ์ง ๋ ๋๋๋ค.
๋ค์์ ๋ฆฌ์กํธ์ ๋ผ์ดํ์ฌ์ดํด์ ๋ํด ์ ๋ํ๋ธ ๋ค์ด์ด๊ทธ๋จ ์ฌ์ดํธ์ด๋ค.
๋ณธ ๊ธ์ ์ฌ์ฉ๋ ๋ค์ด์ด๊ทธ๋จ ์ญ์ ์ ์ฌ์ดํธ๋ฅผ ์บก์ณํ ๊ฒ์ด๋ค.
React Lifecycle Methods diagram
Fully interactive and accessible React Lifecycle Methods diagram.
projects.wojtekmaj.pl
๋ฆฌ์กํธ์ ๋ผ์ดํ์ฌ์ดํด์ ํฌ๊ฒ ์ธ๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
- ์์ฑ ๋ ๋ โก
๋ง์ดํธ
- ์
๋ฐ์ดํธ ํ ๋ โก
์ ๋ฐ์ดํธ
- ์ ๊ฑฐ ํ ๋ โก
์ธ๋ง์ดํธ
๋ง์ดํธ
๋ DOM์ด ์์ฑ๋๊ณ ์น๋ธ๋ผ์ฐ์ ์์์ ๋ํ๋๋ ๊ฒ์ ๋ปํ๊ณ ,
์ธ๋ง์ดํธ
๋ DOM์์ ์ ๊ฑฐ๋๋ ๊ฒ์ ๋ปํ๋ค.
์
๋ฐ์ดํธ
๋ ๋ค์ 4๊ฐ์ง ์ํฉ์์ ๋ฐ์ํ๋ค.
- props๊ฐ ๋ณ๊ฒฝ ๋ ๋
- state๊ฐ ๋ณ๊ฒฝ ๋ ๋
- ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋
- this.forceUpdate๋ฅผ ์ฌ์ฉํด ๊ฐ์ ๋ก ๋ ๋๋ง์ ํธ๋ฆฌ๊ฑฐํ ๋
๊ฐ๋จํ๊ฒ ๊ฐ๊ฐ์ ๋จ๊ณ์ ๋ํด ์ดํด๋ณด์
1. constructor
constructor
๋ ์์ฑ์๋ก, ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ๋ ์ฒ์์ผ๋ก ์คํ๋๋ค. ์ด ๋ฉ์๋๋ ์ด๊ธฐ state๋ฅผ ์ ํ ์ ์๋ค.
ํด๋์คํ ์ปดํฌ๋ํธ์์๋ ์ด๊ธฐ state๋ฅผ ์ค์ ํ ๋ constructor
๋ฅผ ์ฌ์ฉํด์ผ ํ์ง๋ง ํจ์ํ ์ปดํฌ๋ํธ์์๋ useState
๋ฅผ ์ฌ์ฉํด ์ด๊ธฐ์ํ๋ฅผ ์ฝ๊ฒ ์ค์ ํด์ค ์ ์๋ค.
2. render
render
๋ ๊ฐ์ฅ ๊ธฐ์ด์ ์ด๊ณ ๊ฐ์ฅ ์ค์ํ ๋ฉ์๋์ด๋ค. ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ๋ ํ์ํ ๋ฉ์๋๋ก, ์ ์ผํ ํ์ ๋ฉ์๋์ด๋ค. ํจ์ํ ์ปดํฌ๋ํธ์์๋ render
๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ์ ์๋ค.
3. componentDidMount
์ด ๋ฉ์๋๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ ์ฒซ ๋ ๋๋ง์ ๋ง์น ํ ์คํํ๋ค.
4. componentDidUpdate
์ด ๋ฉ์๋๋ ๋ฆฌ๋ ๋๋ง์ ์๋ฃํ ํ ์คํํ๋ค. ์ ๋ฐ์ดํธ๊ฐ ๋๋ ์งํ์ด๋ฏ๋ก, DOM ๊ด๋ จ ์ฒ๋ฆฌ๋ฅผ ํด๋ ๋ฌด๋ฐฉํ๋ค.
5. componentWillUnmount
์ด ๋ฉ์๋๋ ์ปดํฌ๋ํธ๋ฅผ DOM์์ ์ ๊ฑฐํ ๋ ์คํํ๋ค. componentDidMount์์ ๋ฑ๋กํ ์ด๋ฒคํธ๊ฐ ์๋ค๋ฉด ์ฌ๊ธฐ์ ์ ๊ฑฐ ์์ ์ ํด์ผํ๋ค.
๐ useEffect
useEffect
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ ํจ์, ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ ์์กด๊ฐ์ด ๋ค์ด์๋ ๋ฐฐ์ด deps
์ ๋ฃ๋๋ค. ๊ธฐ๋ณธ ํํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
useEffect(() => {
// ์คํํ ์ฝ๋
} , [deps])
useEffect
๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋์ ๋, ์
๋ฐ์ดํธ ๋ ๋, ์ธ๋ง์ดํธ ๋์ ๋ ํน์ ์์
์ ์ฒ๋ฆฌํ ์ ์๋ค.
์์์ ๋ณธ ๋ผ์ดํ์ฌ์ดํด์ ๋จ๊ณ์ ๋ง์ถฐ์ ์ดํด๋ณด์.
1. ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋์ ๋ (componentDidMount
)
deps
๋ฅผ ๋น์ฐ๊ฒ ๋๋ค๋ฉด, ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ํ๋ ๋์๋ง useEffect
์ ๋ฑ๋กํ ํจ์๊ฐ ํธ์ถ๋๋ค.
useEffect(() => {
console.log('์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋ ๋ ์คํ๋๋ค.');
}, []);
2. ์ปดํฌ๋ํธ๊ฐ ์
๋ฐ์ดํธ ๋ ๋ (componentDidUpdate
)
deps
์ ํน์ ๊ฐ์ ๋ฃ๊ฒ ๋๋ค๋ฉด, ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ง์ดํธ ๋ ๋์๋ ํธ์ถ๋๊ณ , ์ง์ ํ ๊ฐ์ด ๋ฐ๋ ๋์๋ ํธ์ถ๋๋ค.
๋ deps
์์ ํน์ ๊ฐ์ด ์๋ค๋ฉด ์ธ๋ง์ดํธ์์๋ ํธ์ถ๋๊ณ , ๊ฐ์ด ๋ฐ๋๊ธฐ ์ง์ ์๋ ํธ์ถ๋๋ค.
useEffect(() => {
console.log(number);
console.log('number๊ฐ ๋ณ๊ฒฝ๋ ๋ ์คํ๋๋ค.');
}, [number]);
useEffect
์์ ์ฌ์ฉํ๋ ์ํ๋ props๊ฐ ์๋ค๋ฉด ๊ผญ deps
๋ฐฐ์ด ์์ ํฌํจ์์ผ์ผ ํ๋ค.
๋ง์ฝ ์ฌ์ฉํ๋ ๊ฐ์ ๋ฃ์ด์ฃผ์ง ์๋๋ค๋ฉด, useEffect
์ ํจ์๊ฐ ์คํ๋ ๋ ์ต์ ์ํ, props๋ฅผ ๊ฐ๋ฆฌํค์ง ์๋๋ค.
3. ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ ๋์ ๋ (componentWillUnmount
)
useEffect
์์๋ ํจ์๋ฅผ ๋ฐํํ ์ ์๋๋ฐ ์ด๋ฅผ cleanup
ํจ์๋ผ ํ๋ค.
cleanup ํจ์๋ useEffect
์ ๋ํ ๋ท์ ๋ฆฌ๋ฅผ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฌํ ์ด๋ฆ์ผ๋ก ๋ถ๋ฆฌ๋๋ฐ,
deps
๊ฐ ๋น์ด์๋ ๊ฒฝ์ฐ ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ผ์ง ๋ cleanup
ํจ์๊ฐ ํธ์ถ๋๋ค.
useEffect(() => {
console.log('์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋ ๋ ์คํ๋๋ค.');
return () => {
console.log('์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ ๋ ๋ ์คํ๋๋ค.');
}
}, []);
deps
๊ฐ ๋น์ด์์ง ์์ ๊ฒฝ์ฐ
deps
์ ์๋ ๊ฐ์ด ์
๋ฐ์ดํธ๋๊ธฐ ์ง์ ์ cleanup
ํจ์๊ฐ ์คํ๋๋ค.
useEffect(() => {
console.log('number๊ฐ ์
๋ฐ์ดํธ ๋ ๋ ์คํ๋๋ค.');
return () => {
console.log('number๊ฐ ์
๋ฐ์ดํธ ๋๊ธฐ ์ง์ ์คํ๋๋ค.');
}
}, [number]);
4. deps
ํ๋ผ๋ฏธํฐ๊ฐ ์๋ค๋ฉด?
deps
ํ๋ผ๋ฏธํฐ๋ฅผ ์๋ตํ๊ฒ ๋๋ฉด, ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋๋ง๋ค ํธ์ถ๋๋ค.
'FRONTEND > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ๋ฐ๋ณต๋ฌธ์์ setState? (0) | 2023.03.09 |
---|---|
[React]useCallback ๊ณผ useMemo ์ฌ์ฉํ๊ธฐ (0) | 2022.10.06 |
[React] ๋ฆฌ์กํธ์์ ์ฟผ๋ฆฌ์คํธ๋ง ๊ฐ ๊ฐ์ ธ์ค๊ธฐ (useSearchParams) (0) | 2022.07.17 |
[React] child์์ parent์ ํจ์๋ก event handler ๋ฑ๋กํ๊ธฐ (0) | 2022.03.30 |
[React] ๋ฆฌ์คํธ์ key (0) | 2022.02.23 |