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
- 템플릿 문자열
- display와 visibility
- Til
- 깃허브
- HTML5문서
- javascript
- github
- 스코프
- 티스토리챌린지
- GIT
- opacity
- overflow: hidden
- 코드스테이츠
- HTML요소
- CSS 박스모델
- 외계행성의 나이
- Code States
- 오블완
- CSS 스타일
- flex box
- section태그와 article태그의 차이점
- 프로그래머스
- history API
- placeholder
- block 박스
- CSS Object Model
- BOM
- 시맨틱
- 객체지향프로그래밍
- Scope
Archives
- Today
- Total
해말그미의 코딩공부
TIL : 무한 렌더링(..ing) 본문
🌼 Bad Request
API 연동 코드는 제대로 한 것 같은데 Bad Request가 떴다. 헤더에 토큰을 안넣고 보내고 있었다,, :>
Bad Request는 HTTP 상태 코드 400을 나타내며, 클라이언트가 서버에 잘못된 요청을 보냈을 때 발생한다.
주요 원인으로는,
1. 잘못된 URL 형식
2. 잘못된 요청 매개변수
3. 잘못된 헤더
4. 세션 또는 인증 문제
🌼 무한 렌더링 문제
만약에 선택된 태그들 있으면 표시되도록 하고
userTags.data =[{id:3, name:embeded},{id:4, name:ios}]
useEffect(()=>{
if(userTags){
const selectedUserTags = userTags.data.map(tags=>tags.id -1); //[3.4] -1 번째를 true로
const updatedList = [...clickedList];
selectedUserTags.forEach(index => {
updatedList[index] = true;
}
});
setClickedList(updatedList);
}
},[userTags, clickedList, setClickedList]);
이렇게 했을 때 무한 렌더링 일어남
🔥 React: 리액트 useEffect 무한 루프 탈출하기
useEffect 무한 루프 탈출하기
velog.io
useEffect에서 상태를 업데이트할 때 무한 루프가 발생할 수 있습니다. 이는 useEffect의 의존성 배열에 있는 상태나 함수가 변경될 때마다 useEffect가 계속해서 실행되기 때문입니다. 이 경우에는 상태 업데이트를 조정하여 무한 루프를 방지할 필요가 있습니다.
가장 일반적인 원인은 clickedList를 업데이트할 때마다 useEffect가 다시 실행되는 것입니다. 이는 useEffect의 의존성 배열에 clickedList가 포함되어 있기 때문에 발생합니다.
해결 방법:
상태 업데이트 조건 추가:
- clickedList를 업데이트할 때 특정 조건을 만족할 때만 setClickedList를 호출하도록 하여 불필요한 렌더링을 방지할 수 있습니다. 예를 들어, isEqual 변수를 사용하여 이전 clickedList와 새로운 updatedList가 다를 때만 업데이트하도록 할 수 있습니다.
- useEffect(() => {
if (userTags) {
const selectedUserTags = userTags.data.map((tag) => tag.id - 1);
const updatedList = [...clickedList];
selectedUserTags.forEach((index) => {
if (index >= 0 && index < updatedList.length) {
updatedList[index] = true;
}
});
// clickedList가 실제로 변경되었는지 확인합니다.
const isEqual = clickedList.every((value, index) => value === updatedList[index]);
if (!isEqual) {
setClickedList(updatedList);
}
}
}, [userTags, clickedList, setClickedList]);
추가 고려 사항:
- 불필요한 렌더링 방지: useEffect 내에서 상태를 업데이트할 때는 불필요한 렌더링이 발생하지 않도록 조심해야 합니다. 상태 업데이트 시에는 항상 이전 상태와 비교하여 실제 변경이 있는 경우에만 업데이트하는 것이 좋습니다.
- 의존성 배열 관리: useEffect의 의존성 배열을 올바르게 관리하여 원하는 동작을 수행할 수 있도록 해야 합니다. 필요한 상태와 함수만 포함되도록 주의깊게 설정하세요.
이 방법들을 활용하여 useEffect에서 발생하는 불필요한 렌더링을 줄이고, 콘솔에 뜨는 로그를 줄일 수 있습니다.
'TIL' 카테고리의 다른 글
TIL : 타입스크립트 복습 (0) | 2024.07.17 |
---|---|
TIL : 이미지 표시 문제 해결 (0) | 2024.07.15 |
TIL (0) | 2024.07.04 |
TIL : 프론트엔드 배포 공부 (0) | 2024.06.29 |
TIL : footer 하단에 고정하기 (0) | 2024.06.28 |
Comments