Input + Output = True
๋ฆฌ์กํธ ๋ผ์ดํ์ฌ์ดํด(ํด๋์คํ vs ํจ์ํ), React hooks ๋ณธ๋ฌธ
๋ฆฌ์กํธ ๋ผ์ดํ์ฌ์ดํด(ํด๋์คํ vs ํจ์ํ), React hooks
IOTrue 2023. 1. 8. 18:08๐ ๋ผ์ดํ์ฌ์ดํด(ํด๋์คํ vs ํจ์ํ), React hooks
โ ๋ผ์ดํ์ฌ์ดํด(ํด๋์คํ vs ํจ์ํ)
๋ผ์ดํ์ฌ์ดํด(LifeCycle)
๋ฆฌ์กํธ์ ์ปดํฌ๋ํธ๋ค์ ๋ผ์ดํ์ฌ์ดํด(์๋ช ์ฃผ๊ธฐ)์ ๊ฐ์ง๊ณ ์๋ค.
๋ผ์ดํ์ฌ์ดํด์ ์ปดํฌ๋ํธ์ ์์ฑ๋ถํฐ ์ ๋ฐ์ดํธ, ๊ทธ๋ฆฌ๊ณ ์๋ฉธ(์ ๊ฑฐ)๋๋ ๊ณผ์ ์ ์๋ฏธํ๋ค.
ํด๋์คํ ์ปดํฌ๋ํธ : ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋๋ฅผ ํตํด์ ํด๋น ์์ ์ ๋ฐ๋ผ ์ปดํฌ๋ํธ๋ฅผ ์กฐ์ํ๋ค.
ํจ์ํ ์ปดํฌ๋ํธ : ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋๊ฐ ๋ฐ๋ก ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์
๋ฆฌ์กํธ ํ
์ ์ฌ์ฉํ์ฌ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋์ ๋น์ทํ๊ฒ ๋์ํ๋๋ก ๊ตฌํํ๋ค.
๋ผ์ดํ์ฌ์ดํด์ ํฌ๊ฒ ์ธ ๋จ๊ณ๋ก ๋๋ ์ง๋ค.
์์ฑ(Mount), ์ ๋ฐ์ดํธ(Update), ์ ๊ฑฐ(Unmount)
- Mount: ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ๋จ๊ณ
- Update: ์๋ 5๊ฐ์ง ๊ฒฝ์ฐ๋ก ์ธํด ์ ๋ฐ์ดํธ ๋๋ค(๋ฆฌ์กํธ ๋ฆฌ๋ ๋๋ง ๋ฐ์ ์กฐ๊ฑด)
state์ ๋ณ๊ฒฝ
setState ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด
๋ฆฌ์กํธ๋ ๋ณ๊ฒฝ์ ๊ฐ์งํ๊ณ ๋ฆฌ๋ ๋๋ง ํ๋ค. (์์ ๋ณต์ฌ๋ฅผ ํตํ ๋น๊ต)
์๋ก์ด props์ ์ ๋ฌ
์ ๋ฌ๋ฐ์ props ๊ฐ์ด ์ ๋ฐ์ดํธ ๋๋ฉด ๋ฆฌ๋ ๋๋ง์ ํจ
๋ถ๋ชจ ์ปดํฌ๋ํธ์ ๋ ๋๋ง
๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋๋ฉด ์์ ์ปดํฌ๋ํธ๋ ํจ๊ป ๋ฆฌ๋ ๋๋ง ๋จ
forceUpdate()์ ์คํ
๋ฆฌ๋ ๋๋ง์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋ (๊ฐ์ ๋ฆฌ๋ ๋๋ง)
shouldComponentUpdate์์ true๊ฐ ๋ฐํ๋ ๋
๊ฐ๊ฐ์ ์ปดํฌ๋ํธ๋ shouldComponentUpdate ๋ผ๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๊ณ
state์ ๋ณ๊ฒฝ ๋๋ ์๋ก์ด props๋ฅผ ์ ๋ฌ ๋ฐ๋ ๊ฒฝ์ฐ ์คํ๋๋ค.
์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก return ๊ฐ์ true ๊ฐ ๋์ด ๋ ๋๋ง์ด ์์๋๊ณ ,
๋ฆฌ๋ ๋๋ง์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ return value = false๋ก ์ง์ ํด์ ๋ฆฌ๋ ๋๋ง์ ๋ง์ ์ ์๋ค
- Unmount: ํ์ด์ง๋ฅผ ์ด๋ํ๊ฑฐ๋, ์ฌ์ฉ์์ ํ๋์ผ๋ก ์ธํด ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง๋ ๋จ๊ณ
๋ฆฌ์กํธ์ ์ปดํฌ๋ํธ๋ค์ ์ ์์์ ๋ฐ๋ผ ์์ฑ, ์ ๋ฐ์ดํธ, ์ ๊ฑฐ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ๋๋ค.
์ด์ ํด๋์คํ๊ณผ ํจ์ํ์ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋ ์ฐจ์ด๋ฅผ ์์๋ณด์.
์ปดํฌ๋ํธ ์ ์
1.constructor
์ปดํฌ๋ํธ ์์ฑ ๋ฉ์๋๋ก ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๋ฉด ์ ์ผ ๋จผ์ ์คํ๋๋ค.
์ด๊ธฐ state๋ฅผ ์ ํ ์ ์๋ค.
ํด๋์คํ ์ปดํฌ๋ํธ
class Example extends React.Component {
constructor(props) {
super(props);
this.state = { number: 0 };
}
ํจ์ํ ์ปดํฌ๋ํธ(useState hook ์ฌ์ฉ)
const Example = () => {
const [number, setNumber] = useState(0);
}
2.render
์ปดํฌ๋ํธ ๋ ๋๋ง ๋ฉ์๋.
ํด๋์คํ ์ปดํฌ๋ํธ
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
ํจ์ํ ์ปดํฌ๋ํธ(render๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ปดํฌ๋ํธ ๋ ๋๋ง ๊ฐ๋ฅ)
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
3. componentDidMount
์ฒ์ ๋ ๋๋ง์ด ๋๋๋ฉด ํธ์ถ๋๋ ๋ฉ์๋๋ก, ํ์ฌ ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ๊ทธ๋ ค์ง ์ํ๋ค.
์ฌ๊ธฐ์์ ๊ฐ์ข
ํจ์ ํธ์ถ, ajax ์์ฒญ, ์ด๋ฒคํธ ๋ฑ๋ก ๋ฑ ์์
์ ์ฒ๋ฆฌํ๋ค.
ํด๋์คํ ์ปดํฌ๋ํธ
class Example extends React.Component {
componentDidMount() {
...
}
}
ํจ์ํ ์ปดํฌ๋ํธ
useEffect hook์ ์ฌ์ฉํด์
componentDidMount, componentDidUpdate, componentDidUnmount๊น์ง ์ฒ๋ฆฌ ๊ฐ๋ฅ.
const Example = () => {
useEffect(() => {
...
}, [] ); //์์กด์ฑ ๋ฐฐ์ด
}
4. componentDidUpdate
๋ฆฌ๋ ๋๋ง์ ์๋ฃํ ํ ์คํํ๋ ๋ฉ์๋.
์ ๋ฐ์ดํธ๊ฐ ๋๋ ์งํ๋ผ์ DOM๊ด๋ จ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
๋งค๊ฐ๋ณ์๋ก prevProps์ prevState๊ฐ ์๊ณ , ๊ฐ๊ฐ ์ ๋ฐ์ดํธ ๋๊ธฐ ์ props, state๋ค.
ํด๋์คํ ์ปดํฌ๋ํธ
class Example extends React.Component {
componentDidUpdate(prevProps, prevState) {
...
}
}
ํจ์ํ ์ปดํฌ๋ํธ(useEffect ์์กด์ฑ ๋ฐฐ์ด์ ๊ฐ ์ถ๊ฐ)
const Example = () => {
useEffect(() => {
...
}, [data] ); //์์กด์ฑ ๋ฐฐ์ด์ ๋ฑ๋ก๋ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ๋ง๋ค ๋ฆฌ๋ ๋๋ง
}
5. componentDidUnmount
์ปดํฌ๋ํธ๋ฅผ DOM์์ ์ ๊ฑฐํ ๋ ์คํํ๋ ๋ฉ์๋.( ex) removeEventListener )
๋ง์ฝ setTimeout ์ ์คํํ๋ค๋ฉด clearTimeout ์ ์คํํด์ ์ ๊ฑฐํ๋ค.
ํด๋์คํ ์ปดํฌ๋ํธ
class Example extends React.Component {
coomponentWillUnmount() {
...
}
}
ํจ์ํ ์ปดํฌ๋ํธ
useEffect()์ return ๋ถ๋ถ์ Unmount ๊ณผ์ ์์ ์ ๋ฆฌํ ๋ฉ์๋(cleanUp ๋ฉ์๋)๋ฅผ ์์ฑํ๋ค.
const Example = () => {
useEffect(() => {
return () => {
...
}
}, []);
}
ํ์ฌ๋ ํจ์ํ ๋ฐฉ์์ด ๋ ๋ง์ด ์ฌ์ฉ๋๊ณ ์๊ณ , ๋ฆฌ์กํธ ๊ณต์๋ฌธ์์์๋ ํจ์ํ ๋ฐฉ์์ ๊ถ์ฅํ๊ณ ์๋ค.
๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ ํจ์ํ ๋ฐฉ์์ ๋จ์ ์ด์๋๋ฐ
๋ฆฌ์กํธ 16.8๋ฒ์ ๋ถํฐ hooks๋ฅผ ํตํด ์ด๋ฅผ ๋ณด์ํ๊ณ , ํด๋์คํ ๋ฐฉ์๋ณด๋ค ์ฝ๋ ๊ฐ๊ฒฐ์ฑ์ด ๋ ์ข๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ๋ฆฌ์กํธ ์๋ ๋ฐฉ์์ ์ดํด์ ๊ธฐ์กด ํด๋์คํ ๋ฐฉ์์ผ๋ก ์์ฑ๋ ์ฝ๋๋ค์
์ ์ง๋ณด์ ํด์ผ ํ๋ ์ํฉ์ด ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์์๋๋ฉด ๋์๋๋ ๋ด์ฉ์ด๋ค.
โ React Hooks
React Hook
React ๋ฒ์ 16.8๋ถํฐ React ์์๋ก ์๋ก ์ถ๊ฐ๋์์ต๋๋ค.
๊ธฐ์กด Class ๋ฐํ์ ์ฝ๋๋ฅผ ์์ฑํ ํ์ ์์ด ์ํ ๊ฐ๊ณผ ์ฌ๋ฌ React์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
-๋ฆฌ์กํธ-
๋ฆฌ์กํธ ํ ์ ์ฌ์ฉํ๋ฉด ์์์ ์ค๋ช ํ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํด์ง๋ ๊ฒ์ด๋ค.
ํจ์ํ ๋ฐฉ์์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
React Hook ๊ท์น
์ต์์(at the Top Level)์์๋ง Hook์ ํธ์ถํ ๊ฒ.
๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ ํน์ ์ค์ฒฉ๋ ํจ์ ๋ด์์ Hook์ ํธ์ถํ๋ฉด ์๋๊ณ
ํญ์ React ํจ์์ ์ต์์(at the top level)์์ return์ด ์คํ๋๊ธฐ ์ ์ Hook์ ํธ์ถํด์ผ ํ๋ค.
์ด ๊ท์น์ ๋ฐ๋ฅด๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋๋ง๋ค ํญ์ ๋์ผํ ์์์ Hook ํธ์ถ์ด ๋ณด์ฅ๋๋ค.
์ด๋ฌํ ์ ์ React๊ฐ useState์ useEffect๊ฐ ์ฌ๋ฌ ๋ฒ ํธ์ถ๋๋ ์ค์๋
Hook์ ์ํ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์งํ ์ ์๋๋ก ํด์ค๋ค.
React ํจ์ ๋ด์์๋ง Hook์ ํธ์ถํ ๊ฒ.
Hook์ ์ผ๋ฐ์ ์ธ JavaScript ํจ์์์ ํธ์ถํ๋ฉด ์ ๋๊ณ ์๋์ ๊ฐ์ด ํธ์ถํด์ผ ํ๋ค.
- React ํจ์ ์ปดํฌ๋ํธ์์ ํธ์ถ
- Custom Hook์์ ํธ์ถ.
์ด ๊ท์น์ ์งํค๋ฉด ์ปดํฌ๋ํธ์ ๋ชจ๋ ์ํ ๊ด๋ จ ๋ก์ง์ ์์ค์ฝ๋์์ ๋ช
ํํ๊ฒ ํ์ธํ ์ ์๋ค.
์์ฃผ ์ฌ์ฉ๋๋ React Hook
1. useState : ์ํ ๊ด๋ฆฌ
2. useEffect : ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋์ฒ๋ผ ์ฌ์ฉ
3. useRef : ํน์ DOM์ ์ ๊ทผ
์ด ์ธ์ useMemo, useCallback ๋ฑ์ด ์๋ค.
โ ๊ฒฐ๋ก
๋ฆฌ์กํธ ์๋ ๋ฐฉ์์ ํ๋ฆ์ ์๊ธฐ ์ํด ๋ผ์ดํ์ฌ์ดํด์ ๊ณต๋ถํ๊ณ ,
๋ฆฌ์กํธ๋ ํ์ฌ ๊ณต์์ ์ผ๋ก ํจ์ํ ๋ฐฉ์์ ๊ถ์ฅํ๊ณ ์์ผ๋
ํจ์ํ ๋ฐฉ์์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ ,
์ด๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๋ฆฌ์กํธ ํ ์ ์ ์ฌ์ฉํ์!
์ฐธ๊ณ
https://ko.reactjs.org/docs/state-and-lifecycle.html
https://ko.reactjs.org/docs/hooks-reference.html
'๐จFrontEnd > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฆฌ์กํธ ์นด์นด์ค ๋ก๊ทธ์ธ (ํ๋ก ํธ ์์ ๋ก๊ทธ์ธ) (0) | 2023.02.01 |
---|---|
๋๊ธฐ ๋น๋๊ธฐ / ์๋ฒ ํต์ (feat. react axios) (0) | 2023.01.15 |
redux persist ์ฌ์ฉ๋ฒ (๋ฆฌ๋์ค ์๋ก๊ณ ์นจ ๋ฐ์ดํฐ ์ ์ง) (0) | 2023.01.05 |
React - redux ์ดํดํ๊ธฐ (๋ฆฌ๋์ค ๊ฐ๋ ์ ๋ฆฌ) (1) | 2023.01.04 |
React - State, Props, ๋ฆฌ๋ ๋๋ง ๋ฐ์ ์กฐ๊ฑด (0) | 2023.01.02 |