BJSNuruhee / levelup

0 stars 0 forks source link

[React] Custom Hook, 실습 예제 #60

Closed yejun95 closed 5 months ago

yejun95 commented 6 months ago

Custom Hook

✔ 예시

image

image

공통 로직 추출 image

image

✔ React Hook 끼리 데이터를 공유하는 방법

image

✔ 실습 예제

// useCounter.jsx

import React, { useState } from 'react'

function useCounter(initialValue) {
    const [count, setCount] = useState(initialValue);

    const increaseCount = () => setCount((count) => count + 1);
    const decreaseCount = () => setCount((count) => Math.max(count - 1, 0));

    return [count, increaseCount, decreaseCount];
}

export default useCounter;


// Accommodate.jsx

import React, { useState, useEffect } from 'react'
import useCounter from './useCounter'

const MAX_CAPACITY = 10;

function Accommodate(props) {
    const [isFull, setIsFull] = useState(null);
    const [count, increaseCount, decreaseCount] = useCounter(0);

    useEffect(() => {
        console.log("=======================")
        console.log("useEffect() is called.")
        console.log(`isFUll: ${isFull}`)
    })

    useEffect(() => {
        setIsFull(count >= MAX_CAPACITY);
        console.log(`Current count value : ${count}`)
    }, [count])

    return (
        <div style={{ padding: 16 }}>
            <p>{`총 ${count}명 수용했습니다.`}</p>

            <button onClick={increaseCount} disabled={isFull}>
                입장
            </button>
            <button onClick={decreaseCount}>퇴장</button>

            {isFull && <p style={{ color: "red" }}>정원이 가득찼습니다.</p>}
        </div>
    )
}

export default Accommodate;


image

image



Reference

인프런 Inje Lee : 처음 만난 리액트(React)