React 기초(4) - useEffect

less than 1 minute read

useEffect

컴포넌트가 렌더링이 될 때마다 리액트에게 어떤 일을 실행시킬 수 있게 해준다.

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

function App() {
  const [count, setCount] = useState(0);
  useEffect(() => {
    console.log(count);
  })
  
  const increment = () => {
    setCount(count + 1);
  }
  return (
    <div className="App">
      <h1>kgw</h1>
      <button onClick={increment}>Click</button>
    </div>
  );
}

export default App;

state를 두개를 둔다고 가정한다면 두번째 state 역시 클릭할 때 리렌더링이 되므로 콘솔에는 +1이 되지 않고 count값이 0으로 찍힐 것이다.

만약 count가 변경될 때만 리렌더링이 실행되게 하고 싶으면 어떻게 해야할까? 그렇다면 useEffect의 두번째 인자에 값을 넣으면 된다. 이 인자는 특정한 상태가 업데이터 되었을 때만 effect가 실행되도록 설정할 수 있다.

만약 []과 같은 빈 배열을 넣는다면 리렌더링 된다 하여도 어떤 state도 변화하지 않는다. 이렇게 쓰면 첫 렌더링이 일어날 때만 실행시키고 그 이후에는 실행시키지 않는다.

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

function App() {
  const [count, setCount] = useState(0);
  const [count2, setCount2] = useState(0)
  useEffect(() => {
    console.log(count);
  }, [count])
  
  const increment = () => {
    setCount(count + 1);
  }
  return (
    <div className="App">
      <h1>kgw</h1>
      <button onClick={increment}>Click</button>
      <button onClick={() => setCount2(count2 + 1)}>Click</button>
    </div>
  );
}

export default App;

Leave a comment