useEffect 훅에서 else 유무에 따른 결과
안녕하세요.
다음 코드에서
useEffect(() => {
if (!origUserList) setUserList([]);
else setUserList(origUserList.map(user => ({ ...user, is_follow: false })));
}, [origUserList]);else가 있어야 하는 이유가 return 하지 않을 것이기 때문이라고 05:55 에서 말씀하셨는데, 이 부분에 대해 이해가 가지 않습니다.
그냥 보기에는 else가 없어도 동일하게 작동할 것 같아서 else를 빼봤는데 아니나 다를까 다음과 같은 에러가 납니다.
SuggestionList.js:24 Uncaught TypeError: Cannot read properties of undefined (reading 'map')
chatGPT에게 물어보니 else가 없어도 동일한 로직이라고 하는데 이유를 모르겠습니다.
Answer 1
0
origUserList 값이 undefined이거나 null인 상황에서는 => setUserList([]) 호출을 할 것이며
origUserList 값이 있을 때에는 => setUserList(origUserList.map(생략)) 호출을 할 것입니다.
origUserList 값이 undefined이거나 null인 상황에서는 setUserList(origUserList.map(생략)) 코드가 호출되어서는 안 됩니다. map 호출은 배열(array)에서만 지원할 뿐, undefined에서는 지원하지 않습니다. undefined 에 대해서 map 호출이 되면 말씀하신 아래 오류가 발생합니다.
Uncaught TypeError: Cannot read properties of undefined (reading 'map')
아래와 같이 코드를 써볼 수도 있고
if (!origUserList) {
setUserList([]);
// return 문은 함수의 종료를 의미합니다. 아래 코드가 수행되지 않습니다.
return;
}
// origUserList 값이 undefined 상황에서는 호출되지 않습니다.
setUserList(origUserList.map(user => ({ ...user, is_follow: false })));혹은 강의처럼 else를 적용하셔도 origUserList값이 undefined 상황에서는 serUsetList.map(생략) 코드가 수행되지 않습니다.
if (!origUserList) {
setUserList([]);
}
else {
setUserList(origUserList.map(user => ({ ...user, is_follow: false })));
}만약 아래와 같이 쓰셨다면 말씀하신 TypeError 예외가 발생합니다.
if (!origUserList) {
setUserList([]);
}
// origUserList가 undefined인 상황에서 아래 코드가 수행되어 TypeError가 발생합니다.
setUserList(origUserList.map(user => ({ ...user, is_follow: false })));
살펴보시고 댓글 남겨주세요.
화이팅입니다. :-)
안녕하세요.
0
44
1
[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?
0
267
1
useAxios 훅의 dependency array 설정
0
241
1
useEffect에서 변수 업데이트 관련 질문
0
378
1
rest_framework.generics.CreateAPIView의 model 속성 유무
0
262
1
bootstrap4
0
464
4
리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요
1
357
1
admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법
0
568
3
useState는 필수일까요?
0
256
1
python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.
0
589
4
Django allauth를 사용한 소셜 로그인 시 에러
0
648
1
프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러
0
548
2
useLocalStorage() 함수 사용여부
0
223
1
django에 LOGIN_URL = '/accounts/login/'의 의미?
0
443
1
리듀서의 의미 재확인
0
423
1
simple-jwt Refresh Token 사용 노하우
0
894
2
docker compose 를 통한 배포 관련 오류 문의
0
664
1
파이썬 속도 장고 관련 궁금한게 있습니다.
0
357
1
is_like_user
0
227
1
related_name 오류
0
267
1
re_path 오류
0
252
1
re_path url
0
243
1
No post matches the given query
0
653
2
sendgrid 메일 발송이 안됩니다 ㅠㅠ
0
884
3

