React Hooks

λ¦¬μ•‘νŠΈλ₯Ό μ‚¬μš©ν•˜λ©° κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” 것 쀑 ν•˜λ‚˜κ°€ λ°”λ‘œ React Hook이닀. useState, useEffect λ“±μ˜ Hook을 많이 μ‚¬μš©ν•˜κ³€ ν–ˆλŠ”λ° 무엇을 React Hook이라고 λΆ€λ₯΄λŠ” 것이며 무슨 역할을 ν•˜λŠ”μ§€ 곡식 λ¬Έμ„œλ₯Ό 보며 κ³΅λΆ€ν•΄λ³΄μž

React Hook?

λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈλŠ” ν•¨μˆ˜ν˜•κ³Ό ν΄λž˜μŠ€ν˜•μœΌλ‘œ μ„ μ–Έν• μˆ˜ μžˆλ‹€. 기본적인 두 μ„ μ–Έλ°©μ‹μ˜ μ°¨μ΄λŠ” μ•„λž˜μ™€ κ°™λ‹€.

ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈ

  • State, LifeCycle κΈ°λŠ₯ μ‚¬μš© κ°€λŠ₯

  • λ©”λͺ¨λ¦¬ μžμ›μ„ ν•¨μˆ˜ν˜•λ³΄λ‹€ 적게 μ‚¬μš©

ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ

  • State, LifeCycle κΈ°λŠ₯ μ‚¬μš© λΆˆκ°€λŠ₯

그럼 κ°„λ‹¨νžˆ μ˜ˆμ‹œ μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄μž.

Class

import React, {Component} from "react";

export default class App extends Component {
	render(){
    	return (
        	<div>
            	ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈ
            </div>
        )
    }
}
Function

import React from "react";

function App(){
	return (
    	<div>
        	ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ
        </div>
    )
}

λ§Œμ•½ μœ„μ˜ μ½”λ“œμ—μ„œ μƒνƒœ 초기 값을 μ„ μ–Έν•΄μ•Ό ν•œλ‹€κ³  κ°€μ •ν•΄λ³΄μž. κ·Έλ ‡λ‹€λ©΄ ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” μ½”λ“œλ₯Ό

import React, {Component} from "react";

export default class App extends Component {
	constructor (props){
    	super(props);
        
        // μƒνƒœκ°’μ€ κ°μ²΄ν˜•μ‹μ΄λ‹€.
        this.state = {
        	age : 20
        };
        setAge = () => {
        	this.setState({age : age + 1})
        }
		render(){
          return (
              <div>
                  ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈ
                  <p>λ‚˜μ΄ : {this.state.age}</p>
              </div>
          )
        }
    }
}

μ΄λ ‡κ²Œ constructorμ•ˆμ—μ„œ this.stateλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„ μ–Έ ν•  수 있고, this.setState(μƒνƒœκ°’)λ₯Ό ν†΅ν•˜μ—¬ μƒνƒœ κ°’μ˜ 변경이 κ°€λŠ₯ν•˜λ‹€.

κ·Έλ ‡λ‹€λ©΄ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” μ–΄λ–»κ²Œ μ„ μ–Έν• κΉŒ?

import React, {useState} from "react";

function App(){
	const [age, setAge] = useState(20)
	return (
    	<div>
        	ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ
            <p>λ‚˜μ΄ : {age}</p>
        </div>
    )
}

맀우 μ΅μˆ™ν•œ μ½”λ“œμ΄λ‹€. useStateλ₯Ό μ‚¬μš©ν•˜μ—¬ μƒνƒœκ°’μ„ μ„ μ–Έν•˜κ³  λ³€κ²½ν•œλ‹€.

그런데 λΆ„λͺ… ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” μƒνƒœκ°’μ— κ΄€λ ¨λœ κΈ°λŠ₯을 μ‚¬μš©ν•˜μ§€ λͺ»ν•œλ‹€κ³  ν–ˆλŠ”λ° μš°λ¦¬λŠ” useStateλ₯Ό μ΄μš©ν•˜μ—¬ μƒνƒœκ°’μ„ μ‚¬μš©ν•˜κ³  μžˆλ‹€. 이 useStateκ°€ λ°”λ‘œ React Hook의 λŒ€ν‘œμ μΈ μ˜ˆμ΄λ‹€.

React Hook은 ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ κΈ°λŠ₯을 μ˜¨μ „νžˆ μ‚¬μš©ν• μˆ˜ μžˆλ„λ‘ ν•΄μ£ΌλŠ” κΈ°λŠ₯이닀.

기본적으둜 ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈλŠ” λ¦¬λ Œλ”λ§μ‹œ ν•¨μˆ˜μ•ˆμ˜ μ½”λ“œκ°€ λ‹€μ‹œ μ‹€ν–‰λœλ‹€. λ”°λΌμ„œ μ»΄ν¬λ„ŒνŠΈ μ•ˆμ˜ μƒνƒœκ°’μ΄ μ΄ˆκΈ°ν™”λ˜μ–΄ μƒνƒœμ™€ κ΄€λ ¨λœ κΈ°λŠ₯을 μ‚¬μš©ν•˜μ§€ λͺ»ν–ˆλ˜ 것이닀. 그런데 React Hook은 μƒνƒœλ₯Ό λΈŒλΌμš°μ € λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜μ—¬ μƒνƒœκ°’μ„ μœ μ§€ν• μˆ˜ 있게 λ§Œλ“€μ–΄ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ‚¬μš©λ˜λŠ” 것이닀.

React Hook을 μ‚¬μš©ν•˜λŠ” λͺ‡κ°€μ§€ κ·œμΉ™μ΄ μ‘΄μž¬ν•œλ‹€.

  • μ΅œμƒμœ„ λ ˆλ²¨μ—μ„œ ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. React Hook은 호좜된 μˆœμ„œμ— μ˜μ‘΄ν•œλ‹€. λ”°λΌμ„œ λ°˜λ³΅λ¬Έμ΄λ‚˜ 쑰건문, μ€‘μ²©λœ ν•¨μˆ˜ λ‚΄μ—μ„œ μ‚¬μš©ν•  경우 μ‹€ν–‰μˆœμ„œκ°€ λ’€λ°”λ€” μš°λ €κ°€ μžˆμ–΄ 훅이 μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜κΈ° μ–΄λ ΅λ‹€.

  • λ¦¬μ•‘νŠΈ ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.

자주 μ‚¬μš©λ˜λŠ” React Hook

이제 자주 μ‚¬μš©λ˜λŠ” React Hook λͺ‡κ°œλ₯Ό μ•Œμ•„λ³΄μž

useState

μœ„μ— μ˜ˆμ‹œλ₯Ό λ“€μ—ˆλ“―μ΄ λ™μ μœΌλ‘œ μƒνƒœλ₯Ό 관리 ν•  수 있게 λ§Œλ“œλŠ” Hook이닀. ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ setState와 μœ μ‚¬ν•˜κ²Œ λ™μž‘ν•œλ‹€.

기본적인 ν˜•νƒœλŠ” μ•„λž˜μ™€ κ°™λ‹€.

const [state, setState] = useState(initialValue)

μ΄ˆκΈ°κ°’μ„ 인자둜 λ°›μœΌλ©° ν˜„μž¬ μƒνƒœ, μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈ ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•œλ‹€.

useEffect

Side Effectλ₯Ό μˆ˜ν–‰ν•˜λŠ” Hook이닀.

Side Effectλž€ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 도쀑 μ–΄λ– ν•œ 객체에 μ ‘κ·Όν•΄μ„œ λ³€ν™”κ°€ μΌμ–΄λ‚˜λŠ” 것을 λ§ν•œλ‹€.

useEffectλŠ” λ Œλ”λ§ 이후 μ§€μ •ν•œ μ˜μ‘΄μ„±λ³€μˆ˜κ°€ λ³€κ²½λ λ•Œ μ‹€ν–‰λ˜λŠ” Hook이닀. 클래슀 μ»΄ν¬λ„ŒνŠΈμ˜ componentDidMount, componentDidUpdate와 μœ μ‚¬ν•˜κ²Œ λ™μž‘ν•œλ‹€. 기본적인 ν˜•νƒœλŠ” μ•„λž˜μ™€ κ°™λ‹€.

useEffect(Callback Function, [dependencies])

첫번째 μΈμžλŠ” μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ‹€ν–‰ν•  콜백 ν•¨μˆ˜μ΄κ³ , λ‘λ²ˆμ§Έ μΈμžλŠ” 콜백 ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λŠ” μ‹œμ , 즉 ν•΄λ‹Ή λ³€μˆ˜κ°€ 변경될 λ•Œ μ½œλ°±ν•¨μˆ˜κ°€ μ‹€ν–‰ν•˜λΌκ³  μ•Œλ €μ£ΌλŠ” 값이닀.

즉, μ»΄ν¬λ„ŒνŠΈκ°€ λ‹€μ‹œ 업데이터 λœλ‹€κ³  ν•˜λ”λΌλ„ νŠΉμ • λ³€μˆ˜μ˜ 값에 μ˜μ‘΄ν•˜μ—¬ μ‹€ν–‰λ˜λ„λ‘ μ„€μ •ν•˜λŠ” Hook이닀.

useMemo

Hook의 이름 κ·ΈλŒ€λ‘œ λ©”λͺ¨ν•˜λŠ” κΈ°λŠ₯을 κ°€μ‘Œλ‹€. κ·Έλ ‡λ‹€λ©΄ μ–΄λ””λ©” λ©”λͺ¨ν•˜λŠ”κ²ƒμ΄ 관건이닀. ν”„λ‘œκ·Έλž¨μ΄ λ™μΌν•œ 계산을 λ°˜λ³΅ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν• λ•Œ 이전 계산 값을 λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜μ—¬ λ°˜λ³΅μˆ˜ν–‰μ„ μ œκ±°ν•˜κ³  결과적으둜 μ»΄ν¬λ„ŒνŠΈμ˜ μ„±λŠ₯을 μ΅œμ ν™” μ‹œν‚€λŠ”λ° μ‚¬μš©λœλ‹€.

기본적인 ν˜•νƒœλŠ” μ•„λž˜μ™€ κ°™λ‹€.

const memo = useMemo(() => function, [dependencies])

useEffect와 μœ μ‚¬ν•˜κ²Œ 2번째 μΈμžκ°€ λ³€κ²½λ˜λ©΄ ν•¨μˆ˜κ°€ μ‹€ν–‰λœλ‹€. 쑰금 λ‹€λ₯Έμ μ€ μ˜μ‘΄μ„±λ³€μˆ˜κ°€ λ³€κ²½λ˜μ—ˆμ„λ•Œλ§Œ λ©”λͺ¨λ¦¬μ— μ €μž₯ν•  값을 λ‹€μ‹œ κ³„μ‚°ν•˜κ³  ν•΄λ‹Ή 값을 μ‚¬μš©ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλŠ” λͺ¨λ‘ λ¦¬λ Œλ”λ§ λœλ‹€. λ”°λΌμ„œ μ˜μ‘΄μ„± λ³€μˆ˜κ°€ λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 이전에 λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜μ–΄ 있던 값을 λ°”λ‘œ λ°˜ν™˜ν•˜κ³  μ»΄ν¬λ„ŒνŠΈλŠ” λ¦¬λ Œλ”λ§ λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ•Œλ¬Έμ— μ΅œμ ν™”μ— μ‚¬μš©λ˜λŠ” 것이닀.

Last updated