본문 바로가기
개발/React

리액트 - useEffect로 useState 콜백 함수 만들기 (How to Make Callback after useState Hook in React)

by 피로물든딸기 2023. 6. 17.
반응형

리액트 전체 링크

 

useStatesetState 함수가 사용된 후, 콜백 함수가 호출되도록 해보자.

 

먼저, input에 입력을 하면 입력된 값을 콘솔 로그로 출력하는 코드를 작성해보자.

import { useState } from "react";

function App() {
  const [number, setNumber] = useState("");

  const handleChange = (e) => {
    setNumber(e.target.value);
    console.log(number);
  };

  return (
    <div className="App">
      <input value={number} onChange={(e) => handleChange(e.target.value)} />
    </div>
  );
}

export default App;

 

콘솔 창에는 입력된 값보다 이전 값이 출력되는 것을 알 수 있다.

useState비동기 함수이기 때문에, setNumber을 하고 로그를 출력하더라도,

그 시점에는 number가 변경되지 않았다.

 

setState에 callback function을 추가해보자.

아쉽게도 Warning이 발생한다.

  const handleChange = (e) => {
    setNumber(e.target.value, () => console.log(number));
  };

 

useState를 사용한 후, 콜백 함수를 호출하려면 useEffect를 이용해야 한다.

아래의 코드는 number가 변경될 때, 로그가 출력되도록 한 코드다.

  const handleChange = (e) => {
    setNumber(e.target.value);
  };

  useEffect(() => console.log(number), [number]);

 

이제 입력한 값 그대로 로그에 출력되는 것을 알 수 있다.

 

전체 코드는 다음과 같다.

import { useEffect, useState } from "react";

function App() {
  const [number, setNumber] = useState("");

  const handleChange = (e) => {
    setNumber(e.target.value);
  };

  useEffect(() => console.log(number), [number]);

  return (
    <div className="App">
      <input value={number} onChange={(e) => handleChange(e)} />
    </div>
  );
}

export default App;
반응형

댓글