Hook

1. Class Component์™€ Function Component

  • Hook์€ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ

  • ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ ์ด์ „์—๋Š” ํด๋ž˜์Šค(class) ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ์—ˆ์Œ. ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋Š” ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์กŒ๊ณ , ์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์—์„œ ์ƒํƒœ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ์Œ.

  • ๋˜ํ•œ React์˜ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” JavaScript์˜ this ํ‚ค์›Œ๋“œ๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ์•„์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Š” ๋ฌธ๋ฒ•์„ ์ •ํ™•ํžˆ ์•Œ์ง€ ๋ชปํ•˜๋ฉด ๋™์ž‘ ๋ฐฉ์‹ ์ž์ฒด๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์—ˆ์Œ.

Class Component

class Counter extends Component {
    constructor(props) {
        super(props);
        this.state = {
            counter: 0
        }
        this.handleIncrease = this.handleIncrease.bind(this);
    }

    handleIncrease = () => {
        this.setState({
            counter: this.state.counter + 1
        })
    }

    render(){
       return (
            <div>
                <p>You clicked {this.state.counter} times</p>
                <button onClick={this.handleIncrease}>
                    Click me
                </button>
            </div>
       ) 
    }
}

Function Component

  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์— ๋น„ํ•ด ํ›จ์”ฌ ๋” ์ง๊ด€์ ์ด๊ณ , ๋ณด๊ธฐ ์‰ฝ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Œ

  • ์ด Counter ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” useState()๋ผ๋Š” ๋ฉ”์†Œ๋“œ โ†’ Hook.

  • ์ฆ‰, Counter ์ปดํฌ๋„ŒํŠธ์—์„œ useState() Hook์„ ํ˜ธ์ถœํ•ด ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— state๋ฅผ ์ถ”๊ฐ€ํ•œ ํ˜•ํƒœ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ.

  • ์ด state๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋˜์–ด๋„ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋  ๊ฒƒ.

  • ๋˜ํ•œ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ State Hook์€ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋•Œ์— ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

function Counter () {
    const [counter, setCounter] = useState(0);

    const handleIncrease = () => {
        setCounter(counter + 1)
    }

    return (
        <div>
            <p>You clicked {counter} times</p>
            <button onClick={handleIncrease}>
                Click me
            </button>
        </div>
    )
}

2. Hook์ด๋ž€?

  • React 16.8์— ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ์œผ๋กœ, class๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ state์™€ ๋‹ค๋ฅธ React์˜ ๊ธฐ๋Šฅ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ๊ฐ’ ๋ฐ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์˜๋ฏธ

  • class๊ฐ€ ์•„๋‹Œ function์œผ๋กœ๋งŒ React๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ์—, ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š์Œ

3. Hook ์‚ฌ์šฉ ๊ทœ์น™

1. ๋ฆฌ์•กํŠธ ํ•จ์ˆ˜์˜ ์ตœ์ƒ์œ„์—์„œ๋งŒ ํ˜ธ์ถœํ•ด์•ผ ํ•จ

  • ๋ฐ˜๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ, ์ค‘์ฒฉ๋œ ํ•จ์ˆ˜ ๋‚ด์—์„œ Hook ์‹คํ–‰ ์‹œ, ์˜ˆ์ƒํ•œ ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์šฐ๋ ค๊ฐ€ ์žˆ์Œ

  • ์ปดํฌ๋„ŒํŠธ ์•ˆ์—๋Š” Hook๋“ค์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, React๋Š” ์ด Hook์„ ํ˜ธ์ถœ๋˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ์„ ํ•ด๋†“์Œ. ๊ทธ๋Ÿฐ๋ฐ ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ ์•ˆ์—์„œ Hook์ด ํ˜ธ์ถœ๋˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ์„ ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ

2. ์˜ค์ง ๋ฆฌ์•กํŠธ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•จ

  • ๋ฆฌ์•กํŠธ๊ฐ€ ์•„๋‹Œ, ๋‹ค๋ฅธ ์ผ๋ฐ˜ JavaScript ํ•จ์ˆ˜ ์•ˆ์—์„œ ํ˜ธ์ถœํ•ด์„œ๋Š” ์•ˆ ๋จ

Last updated