Post

[React] Hooks

리액트정리 2탄 Hooks 정리

리액트 복습 및 정리하기

useState Hook

useState는 함수형 컴포넌트에서 상태를 관리하는 데 사용됨 이 Hook을 사용하면 상태 변수를 선언하고 해당 변수를 업데이트하는 함수를 제공받고 초기 상태 값을 인자로 받아 초기화하며, setState 함수를 통해 상태를 변경할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

import React, { useState } from 'react';

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

  const increment = () => {
    setCount(count + 1);
  };

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

export default Counter;

useEffect Hook

useEffect는 함수형 컴포넌트에서 side effect를 처리하는 데 사용된다. 컴포넌트가 렌더링될 때마다 특정 작업을 수행하거나, props 또는 state의 변경에 따라 추가적인 작업을 수행할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

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

const DataFetcher = () => {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch('https://api.example.com/data')
      .then(response => response.json())
      .then(data => setData(data));
  }, []); // 빈 배열을 넘겨 초기 렌더링 시 한 번만 실행

  return (
    <div>
      {data ? (
        <ul>
          {data.map(item => (
            <li key={item.id}>{item.name}</li>
          ))}
        </ul>
      ) : (
        <p>Loading...</p>
      )}
    </div>
  );
};

export default DataFetcher;

useReducer Hook

useReducer는 복잡한 상태 관리 로직을 개선하기 위해 사용되며 이 Hook을 사용하여 상태와 그 상태를 업데이트하는 액션을 처리하는 reducer 함수를 함께 사용하여 상태를 업데이트할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

import React, { useReducer } from 'react';

const initialState = { count: 0 };

function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      throw new Error();
  }
}

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

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

export default Counter;

useMemo Hook

useMemo는 함수의 결과 값을 메모이제이션하여 성능을 최적화하는 데 사용된다, 의존성 배열을 지정하여 해당 값이 변경될 때만 함수를 다시 계산한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

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

const ExpensiveComponent = ({ count }) => {
  const expensiveFunction = useMemo(() => {
    console.log('Calculating...');
    let result = 0;
    for (let i = 0; i < count * 1000000; i++) {
      result += i;
    }
    return result;
  }, [count]);

  return <div>Expensive calculation result: {expensiveFunction}</div>;
};

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

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

export default MemoExample;

useCallback Hook

useCallback은 메모이제이션된 콜백 함수를 반환하여 자식 컴포넌트에 전달할 때 불필요한 재렌더링을 방지하는 데 사용된다,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import React, { useState, useCallback } from 'react';

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

  const handleClick = useCallback(() => {
    setCount(count + 1);
  }, [count]);

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

export default CallbackExample;

useRef Hook

useRef는 함수형 컴포넌트에서 ref를 생성하거나 DOM 노드에 접근하는 데 사용된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import React, { useRef } from 'react';

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

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

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

export default FocusInput;

Custom Hooks

Custom Hooks는 반복되는 로직을 함수로 추상화하여 재사용할 수 있는 Hook . 다양한 컴포넌트에서 동일한 로직을 사용할 때 Custom Hook을 만들어 사용하면 코드의 재사용성과 가독성을 높일 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { useState, useEffect } from 'react';

const useCustomHook = (initialValue) => {
  const [value, setValue] = useState(initialValue);

  useEffect(() => {
    console.log('Value changed:', value);
  }, [value]);

  const handleChange = (newValue) => {
    setValue(newValue);
  };

  return [value, handleChange];
};

export default useCustomHook;
This post is licensed under CC BY 4.0 by the author.