[React] React Hook

Hook

React 16.8 부터 Hook이 추가 되어 Class 없이 상태 값과 React의 기능들을 사용 가능하다.

Hook은 Class안에서 동작하지 않는다.

Hook 종류

  • 기본 Hook
  • 추가 Hooks
    • useReducer
    • useCallback
    • useMemo
    • useRef
    • useImperativeHandle
    • useLayoutEffect
    • useDebugValue

Hooks 정리

State Hook

Class를 사용할 때 아래의 예시와 같이 state, setState를 사용하는 것을 대체 할 수 있다. Class에서와 달리 변수 각각 useState를 이용해 변수를 업데이트 해야한다.

  • 예시
import React, { useState } from 'react'; // react package로 부터 useState를 import해서 사용한다.

function Example() {
  const [age, setAge] = useState(0); // value, value setter를 useState()로 부터 리턴 받아 사용한다. 인자로 default 값을 넣어준다.

  return (
    <div>
      <p>My age : {age}</p> {/* useState  부터 리턴받은 age 값을 사용할  있다.*/}
      <button onClick={() => setAge(age + 1)}> {/* useState 로 부터 리턴받은 age setter 함수를 사용해 값을 업데이트 할 수 있다..*/}
        Click to increase age.
      </button>
    </div>
  );
}

Effect Hook

Class의 componentDidMount와 componentDidUpdate, componentWillUnmount 처럼 Rendering 후 또는 변수 업데이트 시, 원하는 side effect들을 수행할 수 있다.

  • 예시 - 첫번째 렌더링, 이후 업데이트 시 수행 (DOM이 업데이트 된 후!)
import React, { useState, useEffect } from 'react'; // react package로 부터 useEffect를 import해서 사용한다.

function Example() {
  const [age, setAge] = useState(0);

  useEffect(() => { // Rendering 후에 수행할 effect를 설정할 수 있다.
      document.title = `My Current Age: ${age}`;
  });

  return (
    <div>
      <p>My age : {age}</p>
      <button onClick={() => setAge(age + 1)}>
        Click to increase age.
      </button>
    </div>
  );
}
  • 예시 - 첫번째 렌더링, 이후 특정 값 업데이트 될 때만 수행 (DOM이 업데이트 된 후!)
import React, { useState, useEffect } from 'react'; // react package로 부터 useEffect를 import해서 사용한다.

function Example() {
  const [age, setAge] = useState(0);

  useEffect(() => {
      document.title = `My Current Age: ${age}`;
  }, [age]); // 최초 Rendering 후 혹은 두번째 인자([age])의 값 업데이트 시에 수행할 effect를 설정할 수 있다.

  return (
    <div>
      <p>My age : {age}</p>
      <button onClick={() => setAge(age + 1)}>
        Click to increase age.
      </button>
    </div>
  );
}
  • 예시 - Clean Up의 활용 - useEffect에서 함수를 return
    • componentWillUnmount의 경우와 비슷
    • 바로 실행되지 않고, 다음 Effect 실행 전에 return 되었던 함수가 실행된다.

useEffect가 정의된 function이 다음 랜더링 시 쓰이지 않아도 실행된다.

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

function Example() {
  const [age, setAge] = useState(0);

  useEffect(() => {
      document.title = `My Current Age: ${age}`;

      return () => console.log("Test Log"); // 함수를 리턴할 경우 -> 바로 실행되지 않고, 다음 Effect 실행 전에 수행
  }, []);

  return (
    <div>
      <p>My age : {age}</p>
      <button onClick={() => setAge(age + 1)}>
        Click to increase age.
      </button>
    </div>
  );
}

Source

  • https://ko.reactjs.org/docs/hooks-intro.html

Leave a comment