λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

μ΄λ…Έλ² μ΄μ…˜μΊ ν”„/μ§€μ‹μŒ“κΈ°

라이프사이클(ν΄λž˜μŠ€ν˜• vs ν•¨μˆ˜ν˜•), react hooks

LifeCycle Method

LifeCycle Method λŠ” ν•œκ΅­μ–΄λ‘œ "생λͺ…μ£ΌκΈ° λ©”μ„œλ“œ" 라고 λΆ€λ₯Έλ‹€. 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλŠ” μ»΄ν¬λ„ŒνŠΈκ°€ λΈŒλΌμš°μ €μƒμ— λ‚˜νƒ€λ‚˜κ³ , μ—…λ°μ΄νŠΈλ˜κ³ , μ‚¬λΌμ§€κ²Œ 될 λ•Œ ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œλ“€ 이닀. μΆ”κ°€μ μœΌλ‘œ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ—λŸ¬κ°€ 났을 λ•Œ ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œλ„ μžˆλ‹€.

생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλŠ” ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλ§Œ μ‚¬μš© ν•  수 μžˆλ‹€.

render( ) ν•¨μˆ˜

μ»΄ν¬λ„ŒνŠΈ λͺ¨μ–‘μƒˆλ₯Ό μ •μ˜, μ»΄ν¬λ„ŒνŠΈμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ λ©”μ„œλ“œ,  λΌμ΄ν”„사이클 λ©”μ„œλ“œ 쀑 μœ μΌν•œ ν•„μˆ˜ λ©”μ„œλ“œ

this.props와 this.state에 μ ‘κ·Όν•  수 있으며, λ¦¬μ•‘νŠΈ μš”μ†Œλ₯Ό λ°˜ν™˜

constructor λ©”μ„œλ“œ

constructor(props) { ... }

이것은 μ»΄ν¬λ„ŒνŠΈμ˜ μƒμ„±μž λ©”μ„œλ“œλ‘œ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€ λ•Œ 처음으둜 μ‹€ν–‰, 이 λ©”μ„œλ“œμ—μ„œλŠ” 초기 stateλ₯Ό μ •ν•  수 있음

getDerivedStateFromProps λ©”μ„œλ“œ

이것은 λ¦¬μ•‘νŠΈ v16.3 이후에 μƒˆλ‘œ λ§Œλ“  라이프사이클 λ©”μ„œλ“œ, props둜 λ°›μ•„ 온 값을 state에 λ™κΈ°ν™”μ‹œν‚€λŠ” μš©λ„λ‘œ μ‚¬μš©ν•˜λ©°, μ»΄ν¬λ„ŒνŠΈκ°€ 마운트될 λ•Œμ™€ μ—…λ°μ΄νŠΈλ  λ•Œ 호좜

static getDerivedStateFromProps(nextProps, prevState) {
    if(nextProps.value != = prevState.value) { // 쑰건에 따라 νŠΉμ • κ°’ 동기화
      return { value: nextProps.value };
    }
    return null; // stateλ₯Ό λ³€κ²½ν•  ν•„μš”κ°€ μ—†λ‹€λ©΄ null을 λ°˜ν™˜

componentDidMount λ©”μ„œλ“œ

componentDidMount() { ... }

μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€κ³ , 첫 λ Œλ”λ§μ„ λ‹€ 마친 ν›„ μ‹€ν–‰ 이 μ•ˆμ—μ„œ λ‹€λ₯Έ μžλ°”μŠ€ν¬λ¦½νŠΈ 라이브러리 λ˜λŠ” ν”„λ ˆμž„μ›Œν¬μ˜ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ±°λ‚˜ 이벀트 등둝, setTimeout, setInterval, λ„€νŠΈμ›Œν¬ μš”μ²­ 같은 비동기 μž‘μ—…μ„ μ²˜λ¦¬ν•˜λ©΄ 됨.

shouldComponentUpdate λ©”μ„œλ“œ

shouldComponentUpdate(nextProps, nextState) { ... }

props λ˜λŠ” stateλ₯Ό λ³€κ²½ν–ˆμ„ λ•Œ, λ¦¬λ Œλ”λ§μ„ μ‹œμž‘ν• μ§€ μ—¬λΆ€λ₯Ό μ§€μ •ν•˜λŠ” λ©”μ„œλ“œ, 이 λ©”μ„œλ“œμ—μ„œλŠ” λ°˜λ“œμ‹œ true κ°’ λ˜λŠ” false κ°’을 λ°˜ν™˜ν•΄μ•Ό 함.

getSnapshotBeforeUpdate λ©”μ„œλ“œ

 renderμ—μ„œ λ§Œλ“€μ–΄μ§„ 결과물이 λΈŒλΌμš°μ €μ— μ‹€μ œλ‘œ 반영되기 직전에 호좜 , 주둜 μ—…λ°μ΄νŠΈν•˜κΈ° μ§μ „μ˜ 값을 μ°Έκ³ ν•  일이 μžˆμ„ λ•Œ ν™œμš©(예: μŠ€ν¬λ‘€λ°” μœ„μΉ˜ μœ μ§€).

getSnapshotBeforeUpdate(prevProps, prevState) {
    if(prevState.array != = this.state.array) {
    const { scrollTop, scrollHeight } = this.list
      return { scrollTop, scrollHeight };
    }

componentDidUpdate λ©”μ„œλ“œ

componentDidUpdate(prevProps, prevState, snapshot) { ... }

λ¦¬λ Œλ”λ§μ„ μ™„λ£Œν•œ ν›„ μ‹€ν–‰, μ—…λ°μ΄νŠΈκ°€ λλ‚œ μ§ν›„μ΄λ―€λ‘œ, DOM κ΄€λ ¨ 처리λ₯Ό 해도 무방

componentWillUnmount λ©”μ„œλ“œ

componentWillUnmount() { ... }

μ»΄ν¬λ„ŒνŠΈλ₯Ό DOMμ—μ„œ μ œκ±°ν•  λ•Œ μ‹€ν–‰

componentDidCatch λ©”μ„œλ“œ

μ»΄ν¬λ„ŒνŠΈ λ Œλ”λ§ 도쀑에 μ—λŸ¬κ°€ λ°œμƒν–ˆμ„ λ•Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 먹톡이 λ˜μ§€ μ•Šκ³  였λ₯˜ UIλ₯Ό 보여 쀄 수 있게 ν•΄ 쀌

componentDidCatch(error, info) {
  this.setState({
      error: true
  });
  console.log({ error, info });
}

Hooks

HooksλŠ” λ¦¬μ•‘νŠΈ v16.8에 μƒˆλ‘œ λ„μž…λœ κΈ°λŠ₯으둜 ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλ„ μƒνƒœ 관리λ₯Ό ν•  수 μžˆλŠ” useState, λ Œλ”λ§ 직후 μž‘μ—…μ„ μ„€μ •ν•˜λŠ” useEffect λ“±μ˜ κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ 기쑴의 ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ ν•  수 μ—†μ—ˆλ˜ λ‹€μ–‘ν•œ μž‘μ—…μ„ ν•  수 있게 ν•΄ μ€€λ‹€.

 

useState

useStateλŠ” κ°€μž₯ 기본적인 Hook이며, ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλ„ 가변적인 μƒνƒœλ₯Ό 지닐 수 있게 ν•΄ μ€€λ‹€. λ§Œμ•½ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒνƒœλ₯Ό 관리해야 ν•œλ‹€λ©΄ 이 Hook을 μ‚¬μš©ν•˜λ©΄ λœλ‹€.

useEffect

useEffectλŠ” λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈκ°€ λ Œλ”λ§λ  λ•Œλ§ˆλ‹€ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ„λ‘ μ„€μ •ν•  수 μžˆλŠ” Hook이닀. ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ componentDidMount와 componentDidUpdateλ₯Ό ν•©μΉœ ν˜•νƒœλ‘œ 보아도 λ¬΄λ°©ν•˜λ‹€.

useReducer

useReducerλŠ” useState보닀 더 λ‹€μ–‘ν•œ μ»΄ν¬λ„ŒνŠΈ 상황에 따라 λ‹€μ–‘ν•œ μƒνƒœλ₯Ό λ‹€λ₯Έ κ°’μœΌλ‘œ μ—…λ°μ΄νŠΈν•΄ μ£Όκ³  싢을 λ•Œ μ‚¬μš©ν•˜λŠ” Hook이닀. λ¦¬λ“€μ„œλŠ” ν˜„μž¬ μƒνƒœ, 그리고 μ—…λ°μ΄νŠΈλ₯Ό μœ„ν•΄ ν•„μš”ν•œ 정보λ₯Ό 담은 μ•‘μ…˜(action) κ°’을 전달받아 μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. λ¦¬λ“€μ„œ ν•¨μˆ˜μ—μ„œ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ§Œλ“€ λ•ŒλŠ” λ°˜λ“œμ‹œ λΆˆλ³€μ„±μ„ μ§€μΌœ μ£Όμ–΄μ•Ό ν•œλ‹€.

useMemo

useMemoλ₯Ό μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ λ°œμƒν•˜λŠ” 연산을 μ΅œμ ν™”ν•  수 μžˆλ‹€. 

useCallback

useCallback은 useMemo와 μƒλ‹Ήνžˆ λΉ„μŠ·ν•œ ν•¨μˆ˜μ΄λ‹€. 주둜 λ Œλ”λ§ μ„±λŠ₯을 μ΅œμ ν™”ν•΄μ•Ό ν•˜λŠ” μƒν™©μ—μ„œ μ‚¬μš©ν•˜λŠ”λ°, 이 Hook을 μ‚¬μš©ν•˜λ©΄ 이벀트 ν•Έλ“€λŸ¬ ν•¨μˆ˜λ₯Ό ν•„μš”ν•  λ•Œλ§Œ 생성할 수 μžˆλ‹€.

useRef

useRef Hook은 ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ refλ₯Ό μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•΄ μ€€λ‹€.

이외에 λ‹€λ₯Έ κ°œλ°œμžκ°€ λ§Œλ“  λ‹€μ–‘ν•œ Hooks 리슀트

https://nikgraf.github.io/react-hooks/

 

Collection of React Hooks

 

nikgraf.github.io

μ»€μŠ€ν…€ Hooks λ§Œλ“€μ–΄μ„œ μ‚¬μš©κ°€λŠ₯

μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈμ—μ„œ λΉ„μŠ·ν•œ κΈ°λŠ₯을 κ³΅μœ ν•  경우, 이λ₯Ό μžμ‹ λ§Œμ˜ Hook으둜 μž‘μ„±ν•˜μ—¬ λ‘œμ§μ„ μž¬μ‚¬μš©ν•  수 μžˆλ‹€.

 

좜처 및 참고자료

λ¦¬μ•‘νŠΈλ₯Ό λ‹€λ£¨λŠ” 기술[κ°œμ •νŒ] - κΉ€λ―Όμ€€

https://react.vlpt.us/basic/25-lifecycle.html

 

25. LifeCycle Method · GitBook

25. LifeCycle Method LifeCycle Method λŠ” ν•œκ΅­μ–΄λ‘œ "생λͺ…μ£ΌκΈ° λ©”μ„œλ“œ" 라고 λΆ€λ¦…λ‹ˆλ‹€. 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλŠ” μ»΄ν¬λ„ŒνŠΈκ°€ λΈŒλΌμš°μ €μƒμ— λ‚˜νƒ€λ‚˜κ³ , μ—…λ°μ΄νŠΈλ˜κ³ , μ‚¬λΌμ§€κ²Œ 될 λ•Œ ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œλ“€ μž…λ‹ˆλ‹€.

react.vlpt.us