๋ชฉ์ฐจ
์ด์ ๊ธ โผ
0. 2023.05.05 - [๐ | WEB DEV/React] - [React] 0. React๋ฅผ ์ฌ์ฉํ๋ ์ด์ & ์ด๊ธฐ ์ธํ
1. 2023.05.07 - [๐ | WEB DEV/React] - [React] 1. JSX
2. 2023.05.26 - [๐ | WEB DEV/React] - [React] 2. state (๋ณ์, array, object)
2-1. 2023.05.27 - [๐ | WEB DEV/React] - [React] 2-1. array state ์ ๋ ฌํ๊ธฐ ( .sort()ํ์ฉ)
3. 2023.05.28 - [๐ | WEB DEV/React] - [React] 3. ์ปดํฌ๋ํธ (Component)
4. 2023.05.28 - [๐ | WEB DEV/React] - [React] 4. ๋์ ์ธ UI ์ ์ํ๊ธฐ
5. 2023.05.28 - [๐ | WEB DEV/React] - [React] 5. ๋ฐ๋ณต๋๋ ๋ถ๋ถ ์ถ์ฝํ๊ธฐ (map)
6. 2023.05.29 - [๐ | WEB DEV/React] - [React] 6. props
8. 2023.07.06 - [๐ | WEB DEV/React] - [React] 8. ๋ค๋ฅธ ํ์ผ์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
11. 2023.10.03 - [๐ | WEB DEV/React] - [React] 11. ๋ผ์ฐํ -3 ์์ฐํ ๋ผ์ฐํ
๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ Lifecycle์ ๋ํด์ ์์๋ณด์!
1. ์ปดํฌ๋ํธ์ Lifecycle
์ปดํฌ๋ํธ๋ ํ์ด์ง ๋ด์์ ์๋์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ค.
1) mount (์์ฑ)
2) update (์ฌ๋ ๋๋ง)
3) unmount (์ญ์ )
์์ ์ฃผ๊ธฐ์ ๊ฐ๋ฐ์๋ ๊ฐ์ญ์ ํ ์ ์๋ค.
์ฆ, ์ปดํฌ๋ํธ์ ์ํ ์ค๊ฐ์ค๊ฐ์ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค. (e.g. ์ปดํฌ๋ํธ ์์ฑ ์ ํน์ ์ฝ๋ ์คํ ๋ฑ)
2. ์ปดํฌ๋ํธ Lifecycle์ ๊ฐ์ญํ๋ ๋ฐฉ๋ฒ
ํน์ ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋ ๋ or ์ ๋ฐ์ดํธ๋๊ณ ๋์ or ์ฌ๋ผ์ง๊ธฐ ์ ์ ์ฝ๋๋ฅผ ์คํํ๋ผ!
๋ผ๊ณ ๊ฐ์ญ์ ํ ์ ์๋๋ฐ
์ด๋ฌํ ๊ฐ์ญ์ hook์ ๋ฌ์์ ์ํํ๋ค. (Lifecycle hook)
1) ์ด์ ์ ๋ฐฉ์
Lifecycle hook์ ์์ ์๋ class ๋ฌธ๋ฒ๊ณผ ํจ๊ป
componentDidMount(), componentDidUpdate(), componentWillUnmount() ๋ฅผ ์ด์ฉํ์ฌ ์ํํ์๋ค.
class Page extends React.Component {
componentDidMount(){
//mount ์
}
componentDidUpdate(){
//update ์
}
componentWillUnmount(){
//unmount ์
}
...
}
2) ์ต๊ทผ์ ๋ฐฉ์
์ต๊ทผ์๋ useEffect ํ ์ ์ด์ฉํด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
import {useState, useEffect} from 'react';
function Pages(){
useEffect(()=>{
//mount, update ์ ์ฝ๋ ์คํ
})
...
return(
...
)
}
์์ (mount ์)
import {useState, useEffect} from 'react';
function Pages(){
useEffect(()=>{
console.log("HELLO!");
})
return(
...
)
}
์ด์ฒ๋ผ ์ปดํฌ๋ํธ๊ฐ ๋ก๋๋ ๋ ๋ด๋ถ์ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ ์ ์ ์๋ค. (์์ ์์๋ ํ์ด์ง ์ปดํฌ๋ํธ)
โป useEffect ๋ด๋ถ ์ฝ๋๊ฐ 2๋ฒ ์คํ๋๋ ์ด์
์์ ์์์์๋ ํ์ธ๋๋ฏ useEffect ๋ด๋ถ์ ์ฝ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก 2ํ ์คํ์ด ๋๋ค.
์ด๋ react๊ฐ ์์ฒด์ ์ผ๋ก ๊ฐ๋ฐ ์ ๋๋ฒ๊น ์ ์ํด ์ฌ์ ์ค์ ํ ๊ฒ์ด๋ค. (StrictMode)
๋ฐ๋ผ์ ๋ฐฐํฌ๋ฅผ ์ํ ๋น๋ ํ์ผ์์๋ ์ ์์ ์ผ๋ก 1ํ ์คํํ๋ค.
์ด๋ฅผ ๊ฐ๋ฐํ๊ฒฝ์์๋ ๋์ผํ๊ฒ 1ํ ์คํํ๊ณ ์ถ๋ค๋ฉด
index.js์์ <React.StrictMode> ํ๊ทธ๋ฅผ ์ญ์ ํ๋ฉด ๋๋ค.
์์ 2 update ์(์ฌ๋ ๋๋ง)
import {useState, useEffect} from 'react';
function Pages(){
useEffect(()=>{
console.log("HELLO!");
})
let [count, setCount] = useState(0);
return(
...
<button onClick={()=>{setCount(count+1)}} />
)
}
๋ฒํผ์ ๋๋ฌ ์ฌ๋ ๋๋ง์ด ๋ ๋ useEffect ๋ด๋ถ์ ์ฝ๋๊ฐ ์ฌ ์คํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
3. useEffect๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
1) useEffect์ ๋์์๋ฆฌ
useEffect ๋ด๋ถ์ ์ฝ๋๋ html์ด ๋ชจ๋ ๋ ๋๋ง์ด ๋ ํ ์คํ์ด ๋๋ค.
์์์ ๋ณด์๋ ์์๋ฅผ ๋ค์ ๋ณด๋ฉด,
์์_ useEffect ๋ด๋ถ์ ์๋ ๊ฒฝ์ฐ
import {useState, useEffect} from 'react';
function Pages(){
useEffect(()=>{
console.log("HELLO!");
})
return(
...
)
}
์์_ ์๋ ๊ฒฝ์ฐ
import {useState, useEffect} from 'react';
function Pages(){
console.log("HELLO!");
return(
...
)
}
์์ ์ฝ๋๋ค์ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ค.
ํ์ง๋ง ์ธ๊ธํ๋๋ก
๋ณต์กํ ์ฐ์ฐ์ด๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์ฝ๋๋ค์ useEffect ๋ด๋ถ์ ์์น์ํจ๋ค๋ฉด (e.g. ํ์ด๋จธ, ์๋ฒ์์ ๋ฐ์ดํฐ get)
html ๋ ๋๋ง์ด ๋ ์ดํ์ ๋์ํ๋ฏ๋ก
์ฌ์ฉ์ ์ ์ฅ์์ ์กฐ๊ธ ๋ ๋น ๋ฅด๊ฒ ๋์ํ๋ ์น์ฌ์ดํธ๋ฅผ ์ ๊ณตํ ์ ์๋ค.
2) ์ Effect ์ผ๊น?
ํ๋ก๊ทธ๋๋ฐ ์ฉ์ด ์ค SideEffect ๋ผ๋ ๊ฒ์ด ์๋ค.
์ด๋ ํจ์์ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ์ด ์๋ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์๋ฏธํ๋ค.
useEffect๋ ํด๋น ์ฉ์ด์์ ๋ฐ์จ ์ฉ์ด๋ผ๊ณ ํ๋ค!
๋๊ธ