스택큐힙리스트

어떻게 React의 useEffect를 사용하여 로딩 함수를 한 번만 호출합니까? 본문

카테고리 없음

어떻게 React의 useEffect를 사용하여 로딩 함수를 한 번만 호출합니까?

스택큐힙리스트 2024. 1. 8. 21:49
반응형

useEffect 리액트 훅은 전달된 함수를 변경이 일어날 때마다 실행합니다. 원하는 속성이 변경될 때만 호출하도록 최적화할 수 있습니다.


componentDidMount에서 초기화 함수를 호출하고 변경이 일어날 때 다시 호출하지 않고 싶다면 어떻게 해야 할까요? 컴포넌트에서 어떤 데이터도 필요하지 않은 경우 엔티티를 로드하는 함수를 호출하려면 어떻게 해야 할까요? useEffect 훅을 사용하여 이를 어떻게 구현할 수 있을까요?


class MyComponent extends React.PureComponent {
componentDidMount() {
loadDataOnlyOnce();
}
render() { ... }
}

훅을 사용하면 다음과 같을 수 있습니다:


function MyComponent() {
useEffect(() => {
loadDataOnlyOnce(); // 이는 변경이 일어날 때마다 실행됩니다 :(
}, [...???]);
return (...);
}

답변 1

만약 초기 렌더 이후에 제공된 함수를 useEffect에 실행하고 싶다면, 두 번째 인자로 빈 배열을 넘겨줄 수 있습니다.


function MyComponent() {
useEffect(() => {
loadDataOnlyOnce();
}, []);
return <div> {/* ... */} </div>;
}

답변 2

React의 useEffect를 사용하여 로딩 함수를 한 번만 호출하는 방법
React에서는 useEffect 훅을 사용하여 컴포넌트가 렌더링될 때마다 특정 작업을 수행할 수 있습니다. 그러나 때로는 특정 함수를 한 번만 호출하고 싶을 때도 있습니다. 이러한 경우에는 useEffect를 어떻게 사용해야 하는지 알아보겠습니다.
먼저, useEffect 훅을 사용하려는 컴포넌트에서 useState 훅을 사용하여 상태를 관리해야 합니다. 예를 들어, 다음과 같은 상태를 가진 컴포넌트를 생각해 보겠습니다.
```
import React, { useEffect, useState } from 'react';
const MyComponent = () => {
const [isLoading, setLoading] = useState(false);
useEffect(() => {
if (!isLoading) {
// 로딩 함수 호출
callLoadingFunction();
// 로딩 상태 변경
setLoading(true);
}
}, [isLoading]);
const callLoadingFunction = () => {
// 로딩 함수 작업
console.log(로딩 함수 호출됨!);
};
return (

{/* 컴포넌트 내용 */}

);
}
export default MyComponent;
```
이 예시에서는 useState를 사용하여 isLoading 상태를 관리합니다. 로딩 함수를 호출하려면 isLoading이 false일 때만 호출하도록 useEffect를 설정했습니다. useEffect의 두 번째 매개변수에는 적용할 상태 변수를 넣어 줘야 합니다. 이렇게 하면 상태 값이 변경될 때마다 useEffect가 실행되며, isLoading 값이 변경될 때만 로딩 함수를 호출합니다.
따라서, 초기에 isLoading은 false로 설정되어 있으므로 로딩 함수는 처음 한 번만 호출됩니다. 이후 isLoading 값을 true로 변경하여 로딩 함수가 다시 호출되지 않도록 합니다.
이와 같이 useEffect를 사용하여 로딩 함수를 한 번만 호출하는 방법을 알아보았습니다. 이를 통해 React 애플리케이션에서 효율적으로 작업을 수행할 수 있습니다.

반응형
Comments