React useEffect란 무엇인가요?

React는 UI를 구축하기 위한 JavaScript 라이브러리입니다. useEffect는 React의 라이프사이클 메소드 중 하나로, 컴포넌트가 렌더링될 때마다 특정한 작업을 수행할 수 있도록 해줍니다. 이번 글에서는 React useEffect에 대해 예제와 함께 자세히 설명해보겠습니다.

React의 라이프사이클 메소드

React에서는 라이프사이클 메소드를 사용하여 컴포넌트의 생명주기를 관리합니다. 이 메소드들은 컴포넌트가 생성되고, 업데이트되고, 제거될 때 자동으로 호출됩니다. useEffect는 이러한 라이프사이클 메소드 중 하나이며, 컴포넌트가 렌더링될 때마다 실행됩니다.

useEffect의 기본 사용법

useEffect는 두 개의 매개변수를 받습니다. 첫 번째 매개변수는 함수이며, 두 번째 매개변수는 배열입니다. 함수는 컴포넌트가 렌더링될 때마다 실행되며, 배열에는 useEffect가 의존하는 변수들을 넣습니다.

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

function Example() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `You clicked ${count} times`;
  }, [count]);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

위 예제에서는 버튼을 클릭할 때마다 count가 증가합니다. useEffect는 count가 변경될 때마다 실행되며, 문서의 제목을 업데이트합니
다.

useEffect의 종류

useEffect는 종류에 따라 다양한 방식으로 사용될 수 있습니다. 가장 일반적인 예제는 API 호출과 같은 비동기 작업을 수행할 때 사용하는 것입니다.

componentDidMount 대체하기

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

function Example() {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch('/api/data')
      .then(response => response.json())
      .then(data => setData(data));
  }, []);

  if (!data) {
    return <div>Loading...</div>;
  }

  return (
    <div>
      {data.map(item => (
        <div key={item.id}>{item.name}</div>
      ))}
    </div>
  );
}

위 예제에서는 API를 호출하여 데이터를 가져오고, 데이터가 없으면 "Loading..."을 표시합니다. 데이터가 있으면 각 항목의 이름을 출력합니다.

componentDidUpdate 대체하기

useEffect를 사용하면 componentDidUpdate를 대체할 수 있습니다. useEffect의 두 번째 매개변수 배열에 상태값을 포함시켜 놓으면 해당 상태값이 업데이트될 때마다 useEffect가 실행됩니다.

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

function Example() {
  const [count, setCount] = useState(0);
  const [name, setName] = useState('');

  useEffect(() => {
    console.log(`You clicked ${count} times`);
  }, [count]);

  useEffect(() => {
    console.log(`Your name is ${name}`);
  }, [name]);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
      <input value={name} onChange={e => setName(e.target.value)} />
    </div>
  );
}

위 예제에서는 count와 name이 변경될 때마다 useEffect가 실행되며, 변경된 값을 console에 출력합니다.

useEffect의 주의사항

useEffect는 컴포넌트가 렌더링될 때마다 실행됩니다. 따라서, 너무 많은 useEffect를 사용하면 애플리케이션의 성능에 영향을 미칠 수 있습니다. 또한, useEffect에서 상태값을 변경하는 경우 무한 루프에 빠질 수 있습니다.

결론

React useEffect는 컴포넌트의 생명주기를 관리하고, 특정 작업을 수행할 수 있도록 해줍니다. 이를 활용하면 비동기 작업이나, componentDidUpdate를 대체할 수 있습니다. 하지만, 주의사항에 유의하여 사용해야 합니다.

FAQ

useEffect는 어떤 상황에서 사용하나요?

  • 컴포넌트가 렌더링될 때마다 실행되는 작업을 수행할 때 사용합니다.

useEffect에서 상태값을 변경하면 어떻게 되나요?

  • 무한 루프에 빠질 수 있으므로, 주의해서 사용해야 합니다.

useEffect 대신 componentDidMount와 componentDidUpdate를 사용해도 되나요?

  • useEffect는 두 메소드를 대체할 수 있습니다.

useEffect에서 API 호출을 어떻게 처리하나요?

  • useEffect 안에서 비동기 작업을 처리하면 됩니다.

useEffect를 사용하면 성능에 영향을 미칠까요?

  • 너무 많은 useEffect를 사용하면 성능에 영향을 미칠 수 있습니다.

'개발' 카테고리의 다른 글

AWS STS와 Assume Role  (3) 2023.03.14
code에서 1.1 + 0.1 == 1.2가 다른 이유  (0) 2023.03.14
flex 화면이 레이어 아래로 내려 갈수 있게  (0) 2014.10.08
유용한 사이트 모음  (0) 2014.06.26

+ Recent posts