REACT

REACT HOOK

zayn 2024. 11. 5. 21:13


 React Hook

 1. Hooks 소개 및 기본 개념

 주요 개념 설명
- Hooks는 함수형 컴포넌트에서 상태와 라이프사이클 기능을 사용할 수 있도록 하는 기능입니다. 클래스 컴포넌트 대신 함수형 컴포넌트를 더 유연하고 간단하게 사용할 수 있게 해줍니다.
- 기본 규칙: 
  - Hook은 함수형 컴포넌트의 최상위에서만 호출해야 합니다.
  - 조건문이나 반복문 내부에서는 Hook을 호출하면 안 됩니다.
  - `use`라는 접두어로 시작해야 하며, 함수형 컴포넌트나 커스텀 Hook 내부에서만 사용할 수 있습니다.

사용 시나리오
- 상태 관리: 컴포넌트 내의 상태를 관리할 때 `useState`를 사용합니다.
- 라이프사이클 관리: 특정 이벤트나 데이터 변경 시 효과를 주거나, 구독을 관리할 때 `useEffect`를 사용합니다.
- 참조 및 DOM 접근: DOM 요소에 직접 접근하거나 값이 유지되어야 할 때 `useRef`를 사용합니다.
- 전역 상태: 컴포넌트 간에 전역 상태를 공유할 때 `useContext`를 사용합니다.




 2. 주요 Hooks: `useState`, `useEffect`, `useRef`, `useContext`

 2.1 useState
- 설명: `useState`는 상태를 선언하고, 상태를 업데이트하는 함수(`setState`)를 반환합니다.
- 사용 시나리오: 사용자 입력을 저장하거나, 클릭 횟수와 같은 값을 관리할 때 유용합니다.

예시 코드

import React, { useState } from 'react';

function Counter() {
    const [count, setCount] = useState(0);

    return (
        <div>
            <p>Count: {count}</p>
            <button onClick={() => setCount(count + 1)}>Increment</button>
        </div>
    );
}

export default Counter;



2.2 useEffect
- 설명: `useEffect`는 사이드 이펙트(예: 데이터 페칭, 구독 설정, DOM 조작 등)를 처리할 때 사용됩니다. 컴포넌트가 렌더링될 때, 그리고 의존성 배열에 지정한 값이 변경될 때 호출됩니다.
- 사용 시나리오: 데이터 페칭, 구독 설정, 상태가 바뀔 때 외부 API 호출 등이 필요할 때 유용합니다.

예시 코드

import React, { useState, useEffect } from 'react';

function Timer() {
    const [seconds, setSeconds] = useState(0);

    useEffect(() => {
        const interval = setInterval(() => {
            setSeconds(prevSeconds => prevSeconds + 1);
        }, 1000);

        return () => clearInterval(interval); // 컴포넌트가 언마운트 될 때 정리
    }, []);

    return <p>Seconds: {seconds}</p>;
}

export default Timer;



2.3 useRef
- 설명: `useRef`는 컴포넌트의 DOM 요소에 접근하거나, 렌더링에 영향을 주지 않고 값을 유지하는 데 사용됩니다.
- 사용 시나리오: 포커스 제어, 컴포넌트의 이전 상태를 기억해야 할 때 유용합니다.

예시 코드

import React, { useRef } from 'react';

function TextInput() {
    const inputRef = useRef();

    const handleFocus = () => {
        inputRef.current.focus();
    };

    return (
        <div>
            <input ref={inputRef} type="text" />
            <button onClick={handleFocus}>Focus Input</button>
        </div>
    );
}

export default TextInput;



2.4 useContext
- 설명: `useContext`는 React의 Context API와 함께 사용되어, 전역 상태를 쉽게 사용할 수 있도록 합니다.
- 사용 시나리오: 사용자 인증 정보나 테마 정보와 같이 여러 컴포넌트에서 공유해야 하는 데이터를 전달할 때 유용합니다.

예시 코드

import React, { useContext, createContext } from 'react';

const ThemeContext = createContext('light');

function ThemeDisplay() {
    const theme = useContext(ThemeContext);
    return <p>Current Theme: {theme}</p>;
}

function App() {
    return (
        <ThemeContext.Provider value="dark">
            <ThemeDisplay />
        </ThemeContext.Provider>
    );
}

export default App;



3. 커스텀 Hook 만들기

주요 개념 설명
- 커스텀 Hook은 개발자가 재사용 가능한 상태 관리 로직을 정의할 수 있도록 도와줍니다. `use`로 시작하는 함수를 정의하여 다른 컴포넌트에서 사용할 수 있습니다.

사용 시나리오
- 공유된 로직: 여러 컴포넌트에서 동일한 상태 관리 로직이 필요할 때 커스텀 Hook을 사용해 코드를 재사용하고 간결하게 유지할 수 있습니다.

예시 코드
- useFetch: API 호출을 처리하는 커스텀 Hook



import { useState, useEffect } from 'react';

function useFetch(url) {
    const [data, setData] = useState(null);
    const [loading, setLoading] = useState(true);

    useEffect(() => {
        fetch(url)
            .then(response => response.json())
            .then(data => {
                setData(data);
                setLoading(false);
            });
    }, [url]);

    return { data, loading };
}

// 사용 예시
import React from 'react';

function DataDisplay() {
    const { data, loading } = useFetch('https://jsonplaceholder.typicode.com/posts');

    if (loading) return <p>Loading...</p>;

    return (
        <ul>
            {data.map(post => (
                <li key={post.id}>{post.title}</li>
            ))}
        </ul>
    );
}

export default DataDisplay;







'REACT' 카테고리의 다른 글

REACT Supabase  (0) 2024.11.05
React Router  (0) 2024.11.05
REACT_REDUX  (1) 2024.11.05
REACT_숙련  (0) 2024.11.05
REACT의 기본구조와 스타일링  (0) 2024.11.05