๋ชฉ์ฐจ
์ด์ ๊ธ โผ
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๋ ํด๋น ์ฉ์ด์์ ๋ฐ์จ ์ฉ์ด๋ผ๊ณ ํ๋ค!
4. useEffect ์คํ์กฐ๊ฑด
์ง๊ธ๊น์ง ์ฌ์ฉํ๋ useEffect๋ 1๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง ์๋์ ํํ์๋ค.
useEffect(()=>{})
์ฌ๊ธฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ํ๋ ๋ ์ถ๊ฐํ๋ฉด ์คํ ์กฐ๊ฑด์ ์ถ๊ฐํ ์ ์๋ค.
1) ์กฐ๊ฑด์ ์ถ๊ฐํ ๊ฒฝ์ฐ
useEffect(()=>{},[stat1])
๋๊ดํธ[ ] ์์ ๋ณ์, state ๋ฑ์ ๋ฃ์ด์
๊ทธ ๊ฐ์ด ๋ณํ ๊ฒฝ์ฐ useEffect ๋ด๋ถ ์ฝ๋๊ฐ ์คํ์ด ๋๋ค.
๋ง์ดํธ๊ฐ ๋ ๋ ์คํ๋๋ ๊ฒ์ ์ฌ์ ํ ์ ํจํ๋ค.
์ด๋, ๋๊ดํธ ์ ๋ณ์๋ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ฃ์ด์ค ์ ์๋ค.
useEffect(()=>{},[stat1, stat2, ...])
์ฌ๋ฌ ๊ฐ์ ๋ณ์ ์ค ํ๋๋ผ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค๋ฉด, useEffect ์ฝ๋๊ฐ ์คํ๋๋ค.
2) ์กฐ๊ฑด์ ์ถ๊ฐํ์ง ์์ ๊ฒฝ์ฐ ([ ] ๋ง!)
๋๊ดํธ [ ]๋ง ๋ฃ์ด์ค ๊ฒฝ์ฐ์๋
์ปดํฌ๋ํธ ๋ง์ดํธ ์๋จ 1ํ ๋ง ์คํ๋๋ค.
useEffect(()=>{},[])
5. clean up function
useEffect๊ฐ ์คํ๋๊ธฐ ์ด์ ์ ํน์ ์ฝ๋๋ฅผ ์คํ์ํค๊ณ ์ถ์ ๊ฒฝ์ฐ์๋
return ()=>{ } ์ ์ถ๊ฐํด์ค๋ค.
๋ํ, unmount ์์๋ ์คํ๋๋ค.
useEffect(()=>{
// 2. ~~
return ()=>{
// 1. ~~~
}
})
์ด๋ฅผ clean up function์ด๋ผ๊ณ ํ๋ค.
์ด ๊ธฐ๋ฅ์ useEffect ๋ด๋ถ ์ฝ๋๋ฅผ ์คํ ํ๊ธฐ ์
setTimeout์ clearํ๊ฑฐ๋ socket ์ฐ๊ฒฐ์์ฒญ์ ์ ๊ฑฐ, ajax์์ฒญ์ ์ค๋จํ๋ ๋ฑ
๋ฒ๊ทธ๋ฅผ ๋ฐฉ์งํ ๋ ์ฌ์ฉํ ์ ์๋ค.
์์
useEffect(()=>{
let time = setTimeout(()=>{...}, 1000)
return ()=>{
clearTimeout(time)
}
},[])
useEffect(()=>{
return()=>{
...
}
},[])
์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด unmount ์ 1ํ ์คํ๋๋๋ก ํ ์ ์์!
๋๊ธ