본문 바로가기

sparta/REACT

[REACT] React Hooks

* 주요 훅스
1. useStateuse
2. Effectuse
3. Contextuse
4. Reducer
5. useRef

1. useState

useState는 컴포넌트의 상태를 관리하는 훅

 

import React, { useState } from 'react';

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

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

export default Counter;

 

  • useState는 상태 변수와 그 값을 업데이트할 수 있는 함수를 반환
  • 배열 비구조화 할당을 사용하여 count와 setCount 얻음

 

 

2. useEffect

useEffect는 컴포넌트의 생명주기에서 사이드 이펙트 관리

이 훅은 컴포넌트가 렌더링된 후에 특정 작업을 수행할 수 있게함

 

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

const Timer = () => {
  const [count, setCount] = useState(0);

  useEffect(() => {
    const interval = setInterval(() => {
      setCount(prevCount => prevCount + 1);
    }, 1000);
    
    return () => clearInterval(interval); // 컴포넌트가 언마운트될 때 클리어
  }, []); // 빈 배열을 전달하면 컴포넌트가 처음 렌더링될 때만 실행됨

  return <h1>Timer: {count}s</h1>;
};

export default Timer;

 

  • useEffect 안의 함수는 컴포넌트가 렌더링될 때마다 실행됨. 의존성 배열을 사용해 특정 조건에서만 실행하도록 설정할 수 있음
  • 반환되는 함수는 클린업 함수로, 컴포넌트가 언마운트될 때 호출

 

 

3. useContext

useContext는 리액트의 Context API와 함께 사용하여 전역 상태를 관리할 수 있도록 함

 

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

// Context 생성
const MyContext = createContext();

const ChildComponent = () => {
  const value = useContext(MyContext);
  return <h1>{value}</h1>;
};

const ParentComponent = () => {
  return (
    <MyContext.Provider value="Hello from Context!">
      <ChildComponent />
    </MyContext.Provider>
  );
};

export default ParentComponent;
 

 

  • createContext를 사용해 Context를 생성하고, useContext를 통해 값 소비.
  • Provider를 통해 하위 컴포넌트에 값을 전달.

 

4. useReducer

주로 Redux와 유사한 방식으로 상태를 관리할 수 있게 해줌

import React, { useReducer } from 'react';

const initialState = { count: 0 };

const reducer = (state, action) => {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      return state;
  }
};

const CounterWithReducer = () => {
  const [state, dispatch] = useReducer(reducer, initialState);

  return (
    <div>
      <h1>Count: {state.count}</h1>
      <button onClick={() => dispatch({ type: 'increment' })}>Increment</button>
      <button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>
    </div>
  );
};

export default CounterWithReducer;

 

  • useReducer는 상태와 dispatch 함수 반환, 이를 통해 액션을 보내고 상태를 업데이트할 수 있음
  • reducer 함수에서 상태를 어떻게 변경할지를 정의

 

5. useRef

useRef는 DOM 요소에 직접 접근하거나, 상태를 저장할 수 있는 레퍼런스를 생성하는 훅

import React, { useRef } from 'react';

const TextInput = () => {
  const inputRef = useRef(null);

  const focusInput = () => {
    inputRef.current.focus(); // DOM 요소에 접근하여 포커스 설정
  };

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

export default TextInput;

 

  • useRef는 mutable한 객체를 반환하며, 주로 DOM 요소에 대한 접근이나, 이전 상태를 저장하는 데 사용

'sparta > REACT' 카테고리의 다른 글

[REACT] 숙련주차 - styled-components  (0) 2024.11.04
[REACT]  (1) 2024.11.01
[REACT] PROPS(Read-Only)2  (0) 2024.10.30
[React] main.jsx는 뭘까?  (1) 2024.10.30
[REACT] 에러 (계속 수정중)  (0) 2024.10.30