본문 바로가기

React

6. Hooks

💨 Hook 이란?

 

컴포넌트에서 데이터를 관리(State) 하고 데이터가 변경될 때 상호작용(Effect)을 하기 위해 사용한다.

 

useState 가 바로 State Hook 이다.

 

✅ 유의사항 

 

constr App = () => {
  const [ username, setUsername ] = useState('');
  return (
    <div>
      <h1>{username}님 환영합니다.</h1>
    </div>
  )
}

 

Hook 은 React 함수(컴포넌트, Hook) 내에서만 사용이 가능하다. 

Hook의 이름은 반드시 'use' 로 시작한다.

 

💨 State Hook

 

const App = () => {
  // 일반적인 useState 사용법
  const [ state이름, setState이름 ] = useState(초기값);
}

 

- useState 는 컴포넌트 내 동적인 데이터를 관리할 수 있는 hook 이다.

- 최초에 useState가 호출될 때 초기값으로 설정되며 이후 재 렌더링이 될 경우 무시된다.

- state 는 읽기 전용이므로 직접 수정하면 안된다.

- state 를 변경하기 위해서는 setState 를 이용한다.

- state 가 변경되면 자동으로 컴포넌트가 재 렌더링된다.

 

const App = () => {
  const [ title, setTtile ] = useState("");

  // State 를 변경할 값을 직접 입력
  setTtile("Hello");

  // 또는 현재 값을 매개변수로 받는 함수 선언
  // return 값이 state 에 반영됨
  setTtile((current) => {
    return current + " World ";
  })
}

 

- state 를 변경하기 위해서는 setState 함수에 직접 값을 입력하거나 

- 현재 값을 매개변수로 받는 함수를 전달한다. 이 때, 함수에서 return 되는 값이 state 에 반영된다.

 

💨 Effect Hook 

 

const App = () => {
  useEffect(EffectCallback, Deps)
}

 

- Effect Hook 을 사용하면 함수 컴포넌트에서 side effect를 수행할 수 있다.

 

✅ side effect 란? 

 

React 컴포넌트가 화면에 렌더링된 이후에 비동기로 처리되어야 하는 부수적인 효과들을 흔히 Side Effect라고 일컽습니다. 대표적인 예로 어떤 데이터를 가져오기 위해서 외부 API를 호출하는 경우, 일단 화면에 렌더링할 수 있는 것은 먼저 렌더링하고 실제 데이터는 비동기로 가져오는 것이 권장됩니다. 요청 즉시 1차 렌더링을 함으로써 연동하는 API가 응답이 늦어지거나 응답이 없을 경우에도 영향을 최소화 시킬 수 있어서 사용자 경험 측면에서 유리하기 때문입니다.

 

- 컴포넌트가 최초로 렌더링될 때, 지정한 State나 Prop가 변경될 때마다 이펙트 콜백 함수가 호출된다. 

 

- Deps: 변경을 감지할 변수들의 집합(배열)

- EffectCallback : Deps에 지정된 변수가 변경될 때 실행할 함수

 

EX ) 

 

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

  useEffect(() => {
    console.log(`버튼을 ${count}회 클릭했다.`)
  }, [count])

  return (
    <div>
      <button onClick={() => setCount(count + 1)}>
        클릭!
      </button>
    </div>
  )
}

 - Effect Hook을 사용하면 함수 컴포넌트에서 side effect 를 수행할 수 있다.

 

- 컴포넌트가 최초로 렌더링 될 때, 지정한 State 나 Prop가 변경될 때마다 이펙트 콜백 함수가 호출된다.

 

 

'React' 카테고리의 다른 글

8. useState, useRef, useContext, useReducer  (0) 2022.03.11
* SPA, MPA, CSR, SSR  (0) 2022.03.07
5. 이벤트 처리  (0) 2022.03.05
4. State  (0) 2022.03.03
3. Props  (0) 2022.03.02