ํฐ์คํ ๋ฆฌ ๋ทฐ
side effect ( = effect)
๊ธฐ๋ฅ
- ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
- ๊ตฌ๋ ์ค์ ํ๊ธฐ
- ์๋์ผ๋ก ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ DOM ์์ ํ๊ธฐ
์ข ๋ฅ
- ์ ๋ฆฌ(clean-up)๊ฐ ํ์ํ ๊ฒ
- ๊ทธ๋ ์ง ์์ ๊ฒ
์ ๋ฆฌ(Clean-up)๋ฅผ ์ด์ฉํ์ง ์๋ Effects
๋ฆฌ์กํธ๊ฐ DOM์ ์ ๋ฐ์ดํธํ ๋ค ์ถ๊ฐ๋ก ์ฝ๋๋ฅผ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ
- ๋คํธ์ํฌ ๋ฆฌํ์คํธ
- DOM ์๋ ์กฐ์
- ๋ก๊น
-> ์คํ ์ดํ ์ ๊ฒฝ ์ธ ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์!
useEffect
useEffect๊ฐ ํ๋ ์ผ?
-> useEffect Hook์ ์ด์ฉํ์ฌ ์ฐ๋ฆฌ๋ ๋ฆฌ์กํธ์๊ฒ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ์ดํ์ ์ด๋ค ์ผ์ ์ํํด์ผํ๋ ์ง๋ฅผ ๋งํจ
- ๋ฆฌ์กํธ๋ ์ฐ๋ฆฌ๊ฐ ๋๊ธด ํจ์(effect)๋ฅผ ๊ธฐ์ตํ๋ค๊ฐ DOM ์ ๋ฐ์ดํธ๋ฅผ ์ํํ ์ดํ์ ๋ถ๋ฌ๋ผ ๊ฒ
- ๋ฌธ์ ํ์ดํ ์ง์ , ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ๋ช ๋ นํ API ๋ถ๋ฌ๋ด๊ธฐ ๋ฑ
useEffect๋ฅผ ์ปดํฌ๋ํธ ์์์ ๋ถ๋ฌ๋ด๋ ์ด์ ?
-> effect๋ฅผ ํตํด count state ๋ณ์(๋๋ ๊ทธ ์ด๋ค props์๋)์ ์ ๊ทผํ ์ ์๊ฒ ๋จ
- ํจ์ ๋ด๋ถ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ํน๋ณํ API์์ด๋ ๊ฐ์ ์ป์ ์ ์์
useEffect๋ ๋ ๋๋ง ์ดํ์ ๋งค๋ฒ ์ํ๋๋?
-> YES! ๊ธฐ๋ณธ์ ์ผ๋ก ์ฒซ๋ฒ์งธ ๋ ๋๋ง๊ณผ ์ดํ ๋ชจ๋ ์ ๋ฐ์ดํธ์์ ์ํ๋จ
- Mounting๊ณผ Update๋ผ๋ ๋ฐฉ์์ผ๋ก ์๊ฐํ๊ธฐ๋ณด๋จ, effect๋ฅผ ๋ ๋๋ง ์ดํ์ ์ํ๋ ๊ฒ์ผ๋ก ์๊ฐํ๋ ๊ฒ์ด ๋ ์ฝ๋ค
- ๋ฆฌ์กํธ๋ effect๊ฐ ์ํ๋๋ ์์ ์ ์ด๋ฏธ DOM ์ ๋ฐ์ดํธ๊ฐ ๋์์์ ๋ณด์ฅ
TIP
- componentDidMount ๋๋ componentDidUpdate์๋ ๋ฌ๋ฆฌ
useEffect์์ ์ฌ์ฉ๋๋ effect๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ์ฐจ๋จํ์ง ์๋๋ค. - ์ด๋ก ์ธํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ฑ ํฅ์
- ๋๋ถ๋ถ์ effect๋ ๋๊ธฐ์ ์ผ๋ก ์คํ๋ ํ์X
- ๋๊ธฐ์ ์คํํ ํ์ํ ๊ฒฝ์ฐ, useLayoutEffect ํ ์ฌ์ฉ (useEffect์ ๋์ผํ API์ฌ์ฉ)
์ ๋ฆฌ(Clean-up)๋ฅผ ์ด์ฉํ๋ Effects
์ธ๋ถ ๋ฐ์ดํฐ์ ๊ตฌ๋ ์ ์ค์ ํด์ผ ํ๋ ๊ฒฝ์ฐ
๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์ ๋ฆฌ(clean-up)ํ๋ ๊ฒ์ ๋งค์ฐ ์ค์!
Class ์ปดํฌ๋ํธ ์ฌ์ฉ ์์
componentDidMount() {
ChatAPI.subscribeToFriendStatus(
this.props.friend.id,
this.handleStatusChange
);
}
componentWillUnmount() {
ChatAPI.unsubscribeFromFriendStatus(
this.props.friend.id,
this.handleStatusChange
);
}
handleStatusChange(status) {
this.setState({
isOnline: status.isOnline
});
}
- componentDidMount ์ componentWillUnMount ๋ฉ์๋ ๋ด์ ๊ฐ๋
์ ๊ฐ์ effect์ ๋ํ ์ฝ๋๊ฐ ์์์๋,
์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ ์ด๋ฅผ ๋ถ๋ฆฌํจ
Hook ์ฌ์ฉ ์์
useEffect(() => {
function handleStatusChange(status) {
setIsOnline(status.isOnline);
}
ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
// effect ์ดํ์ ์ด๋ป๊ฒ ์ ๋ฆฌ(clean-up)ํ ๊ฒ์ธ์ง ํ์ํฉ๋๋ค.
return function cleanup() {
ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
};
});
effect์์ ํจ์ ๋ฐํํ๋ ์ด์ ?
-> clean-up ํ๋ ค๊ณ
- ๋ชจ๋ effect๋ clean-up์ ์ํ ํจ์ ๋ฐํ ๊ฐ๋ฅ
- ๊ตฌ๋ ์ ์ถ๊ฐ์ ์ ๊ฑฐ๊ฐ ๋ฌถ์ฌ์ ๋ชจ๋ ํ๋์ effect๋ฅผ ๊ตฌ์ฑ
๋ฆฌ์กํธ๊ฐ effect๋ฅผ clean-upํ๋ ์์ ์ ์ ํํ ์ธ์ ?
-> ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ํด์ ๋ ๋
- ํ์ง๋ง, ์ ์์์์ ๋ณด์๋ฏ์ด, effect๋ ํ๋ฒ์ด ์๋๋ผ ๋ ๋๋ง ๋ ๋๋ง๋ค ์คํ๋จ
(๋๋ฌธ์,๋ค์ effect๋ฅผ ์คํํ๊ธฐ ์ ์ ์ด์ ๋ ๋๋ง์์ ํ์๋ effect๋ฅผ clean-up ํด์ผํจ)
TIP
- effect์์ ๋ฐ๋์ ์ ๋ช ํจ์(named function)์ ๋ฐํํด์ผ ํ๋ ๊ฒ์ ์๋
- ํ์ดํ ํจ์๋ฅผ ๋ฐํํ๊ฑฐ๋ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ถ๋ฌ๋ ๋ฌด๋ฐฉ. (๋ชฉ์ ์ ๋ถ๋ช ํ ํ๊ธฐ ์ํด clean-up์ด๋ผ๊ณ ๋ถ๋ฆ)
์์ฝ
- effect Hook์ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ํ ๊ฐ์ API๋ก ํตํฉํ๋ค.
- Hook์ ์ด์ฉํ๋ฉด ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋์ ๋ฐ๋ผ์๊ฐ ์๋๋ผ ์ฝ๋๊ฐ ๋ฌด์์ ํ๋์ง์ ๋ฐ๋ผ ๋๋ ์ ์์
* ์ฐธ๊ณ ์๋ฃ *
React ํด๋์ค ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ
- Total
- Today
- Yesterday
- ๊ตฌ๊ธ
- ๋ฆฌ์กํธ ๋ ๋๋ง
- ๋ฆฌ์กํธ setState
- ๋จ๊ธฐ์ง์ค๊ณผ์
- ๋ฆฌ๋์ค store
- ๋ฆฌ์กํธ ํ
- ML
- machine learning
- ๋ฆฌ๋์ค
- ์ปดํฌ๋ํธ
- ๋ฆฌ์กํธ ๊ธฐ์ด
- Docker&Kubernetes:์ค์ ๊ฐ์ด๋-2022๋ ํ
- ๋ฆฌ์กํธ ๊ณต์๋ฌธ์
- Cloud
- ํด๋ผ์ฐ๋
- React DOM
- ๋ฆฌ์กํธ
- ๋ฆฌ์กํธ ์ปดํฌ๋ํธ
- React
- ๊ตฌ๊ธํด๋ผ์ฐ๋ํ๋ซํผ
- React Hook
- ์ํ์ฝ๋ฉ ๋ฆฌ์กํธ
- ๋์ปค
- ๋จธ์ ๋ฌ๋
- ๋ฆฌ์กํธ state
- docker
- ํ ์ํ๋ก์ฐ
- GCP
- ๋ฆฌ์กํธ useEffect
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |