상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - React에서 비동기 작업을 처리하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
React에서 비동기 작업을 처리하는 방법은 여러 가지가 있으며, 주로 API 호출, 데이터 fetching, 타이머, 이벤트 리스너 등 다양한 비동기 작업을 포함합니다. 이러한 비동기 작업을 효과적으로 처리하기 위해 React에서는 여러 가지 패턴과 도구를 제공합니다. 아래에서 주요 방법들을 자세히 설명하겠습니다. 1. <a href='https://sangseek.com/sangseeks/useEffect/ko'>useEffect</a> 훅 React의 `useEffect` 훅은 컴포넌트가 렌더링된 후에 비동기 작업을 수행할 수 있는 가장 일반적인 방법입니다. `useEffect`는 컴포넌트의 생명주기와 관련된 작업을 처리하는 데 사용되며, API 호출과 같은 비동기 작업을 수행할 때 유용합니다. ```javascript import React, { useEffect, useState } from 'react'; const MyComponent = () => { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchData = async () => { try { const response = await fetch('https://api.example.com/data'); if (!response.ok) { throw new Error('Network response was not ok'); } const result = await response.json(); setData(result); } catch (error) { setError(error); } <a href='https://sangseek.com/sangseeks/finally/ko'>finally</a> { setLoading(false); } }; fetchData(); }, []); // 빈 배열을 전달하여 컴포넌트가 처음 마운트될 때만 실행 if (loading) return <div>Loading...</div>; if (error) return <div>Error: {error.<a href='https://sangseek.com/sangseeks/message/ko'>message</a>}</div>; return <div>{JSON.stringify(data)}</div>; }; ``` 2. 비동기 함수와 Promise React 컴포넌트 내에서 비동기 함수를 정의하고 이를 호출하여 비동기 작업을 수행할 수 있습니다. 위의 예제에서 `fetchData` 함수는 비동기 함수로 정의되어 있으며, `await` 키워드를 사용하여 Promise가 해결될 때까지 기다립니다. 3. 상태 관리 라이브러리 Redux, MobX, <a href='https://sangseek.com/sangseeks/Recoil/ko'>Recoil</a>과 같은 상태 관리 라이브러리를 사용하면 비동기 작업을 보다 체계적으로 관리할 수 있습니다. 예를 들어, Redux에서는 `redux-thunk` 또는 `redux-saga`와 같은 미들웨어를 사용하여 비동기 작업을 처리할 수 있습니다. Redux Thunk 예제 ```javascript // actions.js export const fetchData = () => { return async (dispatch) => { dispatch({ type: 'FETCH_DATA_REQUEST' }); try { const response = await fetch('https://api.example.com/data'); const data = await response.json(); dispatch({ type: 'FETCH_DATA_SUCCESS', payload: data }); } catch (error) { dispatch({ type: 'FETCH_DATA_FAILURE', payload: error }); } }; }; // reducer.js const initialState = { loading: false, data: null, error: null, }; const dataReducer = (state = initialState, action) => { s<a href='https://sangseek.com/sangseeks/witch/ko'>witch</a> (action.type) { case 'FETCH_DATA_REQUEST': return { ...state, loading: true }; case 'FETCH_DATA_SUCCESS': return { loading: false, data: action.payload, error: null }; case 'FETCH_DATA_FAILURE': return { loading: false, data: null, error: action.payload }; default: return state; } }; ``` 4. <a href='https://sangseek.com/sangseeks/React Query/ko'>React Query</a> React Query는 <a href='https://sangseek.com/sangseeks/서버 상태/ko'>서버 상태</a>를 관리하기 위한 라이브러리로, 비동기 작업을 간편하게 처리할 수 있는 기능을 제공합니다. 데이터 fetching, caching, synchronization 등을 자동으로 처리해 주므로, 복잡한 상태 관리 없이도 비동기 작업을 쉽게 구현할 수 있습니다. ```javascript import { useQuery } from 'react-query'; const MyComponent = () => { const { data, error, isLoading } = useQuery('fetchData', async () => { const response = await fetch('https://api.example.com/data'); if (!response.ok) throw new Error('Network response was not ok'); return response.json(); }); if (isLoading) return <div>Loading...</div>; if (error) return <div>Error: {error.message}</div>; return <div>{JSON.stringify(data)}</div>; }; ``` 5. 비동기 작업 취소 비동기 작업을 수행할 때, 컴포넌트가 언마운트되거나 다른 이유로 작업을 취소해야 할 경우가 있습니다. 이를 위해 `<a href='https://sangseek.com/sangseeks/AbortController/ko'>AbortController</a>`를 사용할 수 있습니다. ```javascript useEffect(() => { const controller = new AbortController(); const fetchData = async () => { try { const response = await fetch('https://api.example.com/data', { signal: controller.signal, }); const result = await response.json(); setData(result); } catch (error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { setError(error); } } }; fetchData(); return () => { controller.abort(); // 컴포넌트 언마운트 시 요청 취소 }; }, []); ``` 결론 React에서 비동기 작업을 처리하는 방법은 다양하며, 상황에 따라 적절한 방법을 선택하는 것이 중요합니다. `useEffect` 훅을 사용한 간단한 API 호출부터 Redux와 같은 상태 관리 라이브러리, React Query와 같은 전문 라이브러리까지, 각 방법은 특정 요구 사항에 맞게 최적화되어 있습니다. 비동기 작업을 효과적으로 관리하면 사용자 경험을 향상시키고, 애플리케이션의 성능을 개선할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기