Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 시맨틱
- Code States
- section태그와 article태그의 차이점
- 객체지향프로그래밍
- display와 visibility
- CSS 스타일
- overflow: hidden
- 코드스테이츠
- placeholder
- opacity
- flex box
- HTML5문서
- Scope
- BOM
- 오블완
- 깃허브
- GIT
- 프로그래머스
- javascript
- github
- CSS Object Model
- 스코프
- CSS 박스모델
- Til
- 템플릿 문자열
- 외계행성의 나이
- history API
- HTML요소
- block 박스
- 티스토리챌린지
Archives
- Today
- Total
해말그미의 코딩공부
API로 가져온 데이터를 상태에 저장해야 하는 경우(useEffect) 본문
//youtubeApi.tsx
import axios from "axios";
const apiClient = axios.create({
baseURL: "https://youtube.googleapis.com/youtube/v3",
});
export const petsVideos = async () => {
try {
const response = await apiClient.get("videos", {
params: {
part: "snippet",
chart: "mostPopular",
maxResults: "16",
regionCode: "KR",
videoCategoryId: "15",
key: import.meta.env.VITE_REACT_APP_API_KEY,
},
});
console.log("response.data.items", response);
return response.data.items;
} catch (error) {
console.log(error);
}
};
//thumbs.tsx
const [videos, setVideos] = useState<Video[]>([]);
console.log("videos", videos);
useEffect(() => {
const fetchVideos = async () => {
const response = await petsVideos();
setVideos(response);
};
fetchVideos();
}, []); // 의존성 배열이 비어 있어 컴포넌트 최초 렌더링 시 1회 호출
🌼 petsVideos();를 바로 호출하지 않고 useEffect 안에서 fetchVideos라는 함수를 정의한 뒤 호출하는 이유는??
API로 가져온 데이터를 React 컴포넌트의 상태에 저장해야 하는 경우, useEffect 안에서 상태를 업데이트하는 것이 일반적이다.
React 컴포넌트 렌더링 타이밍 제어
React 컴포넌트의 초기 렌더링이 이루어진 후에 API 호출을 수행해야 한다.
- useEffect는 컴포넌트가 렌더링 된 이후에 실행되므로, 초기 렌더링과 비동기 작업을 분리할 수 있다.
- 만약 petsVideos();를 컴포넌트 바깥에서 바로 호출하면, 컴포넌트가 렌더링 되기 전에 API 호출이 실행될 수 있다. 이는 React의 렌더링 흐름과 충돌하거나 원치 않는 타이밍 문제를 초래할 수 있다.
🌼 정리
useEffect를 사용하면 React 컴포넌트의 생명주기에 맞춰 비동기 작업을 처리할 수 있고, 상태 업데이트와 재렌더링 흐름을 자연스럽게 통합할 수 있다. 즉, 컴포넌트 렌더링 흐름을 깨지 않고 데이터를 가져오는 표준적인 방법. petsVideos();를 바로 호출하는 것은 이런 React의 상태 관리 및 흐름과 동떨어져 효율적이지 않다.
순서를 정리해 보면,
- 컴포넌트 렌더링 → useEffect 실행
- API 요청 → 응답 데이터를 상태에 저장 (setState)
- 상태 업데이트 → 컴포넌트 재렌더링 → 데이터가 화면에 반영
'petflix' 카테고리의 다른 글
Petflix - 유튜브 프로필 사진 (API 호출 함수) (0) | 2024.11.28 |
---|---|
Petflix - youtube API(javascript) (0) | 2024.10.19 |
Petflix - History API 라우팅 (0) | 2024.10.14 |
Petflix - display와 visibility (0) | 2024.10.12 |
petflix : document.addEventListener("DOMContentLoaded") (2) | 2024.09.29 |
Comments