728x90
fech 무한루프
.jsx파일로 외부데이터를 연결하기 위해 fetch를 사용했는데 무한루프가 걸렸다.
코드는 아래 코드처럼 작성함
import React, { useEffect, useState } from 'react';
function Products() {
const [products, setProducts] = useState([]);
const [checked, setChecked] = useState(false);
const handleChange = () => {
return setChecked(prev => !prev)
}
fetch(`data/${checked ? 'sale_' : ''}products.json`)
.then((res) => res.json())
.then((data) => {
setProducts(data)
});
}
export default Products;
1. (Products())함수가 실행되면서 state를 초기화해줌
2. (fetch)네트워크에서 데이터를 받아온 다음 setProducts로 다시 state를 업데이트함
3. state를 변경하면 react에서는 다시 함수를 호출함
1~3 반복 무한루프 발생
해결 : useEffect
import React, { useEffect, useState } from 'react';
function Products() {
const [products, setProducts] = useState([]);
const [checked, setChecked] = useState(false);
const handleChange = () => {
return setChecked(prev => !prev)
}
useEffect(() => {
fetch(`data/${checked ? 'sale_' : ''}products.json`)
.then((res) => res.json())
.then((data) => {
setProducts(data)
});
return () => {
console.log('클린')
}
}, [checked])
}
(추가더보기):https://jacobgrowthstory.tistory.com/51
728x90
'TIL' 카테고리의 다른 글
128. React useMemo,memo, useCallback 정리 TIL 23.02.14 (0) | 2023.02.14 |
---|---|
127. JS 화살표함수 () => (), () => {return...} TIL 23.02.13 (0) | 2023.02.13 |
125. JS Callback 사용이유 TIL 23.02.09 (0) | 2023.02.09 |
124. TIL 23.02.07 (0) | 2023.02.07 |
123. Web Browser 빈 화면에서 렌더링이 완료되기까지 오래 걸릴 때. TIL 23.02.06 (0) | 2023.02.06 |
댓글