Diary.jsx
import { useContext, useState, useEffect } from "react";
import { DiaryStateContext } from "../App";
import { useNavigate } from "react-router-dom";
const useDiary = (id) => {
const data = useContext(DiaryStateContext);
const [currentDiaryItem, setCurrentDiaryitem] = useState();
const nav = useNavigate();
useEffect(() => {
const currentDiaryItem = data.find(
(item) => String(item.id) === String(id)
);
if (!currentDiaryItem) {
window.alert("존재하지 않는 일기입니다.");
nav("/", { replace: true });
}
setCurrentDiaryitem(currentDiaryItem);
}, [id, data]);
//data는 왜쓰는지?
return currentDiaryItem;
};
export default useDiary;
강의 내용코드입니다. 현재의 일기를 가져오는 커스텀훅입니다.
여기서 문제는
"존재하지 않는 일기입니다"라는 경고창이 2번뜹니다. http://localhost:5173/diary/1234 처럼 아무숫자나 입력했을 때 그리고 http://localhost:5173/ 으로 이동한 후에 경고창이 한번 더 뜹니다. useEffect가 id가 변함에 따라 계속 실행되어서라는 이유로 알고 있습니다. 그러면 왜 선생님코드에서는 경고창이 2번 뜨지 않았을까용?
그리고 의존성 배열에
[id, data]2가지를 담는 이유가 궁금합니다. 현재 prams.id가 바뀔 때만 작동하게 해도 되지 않을까요? 사용자가 data를 수정하면서 페이지의 파라미터가 바뀌는 상황이 동시에 일어나지 않을 거 같아서요
답변 1
0
안녕하세요 이정환입니다. 순서대로 답변드릴게요
1) 경고창이 두번 뜨는 문제
결론부터 말씀드리자면 경고창은 한번만 떠야 정상입니다. ~/diary/333 같은 페이지로 접근했을 때에는 id의 값은 333으로 최초 고정된 이후 변화하지 않기에 경고창이 두번 발생하는 것은 뭔가 문제가 있는 것으로 보입니다.
혹시 main.jsx 파일에 StrictMode 컴포넌트를 제거하지 않으신게 아닌지 확인 부탁드립니다.
2) Deps에 id와 data를 둘 다 담는 이유
안정적인 향후 기능 구현을 위해 넣어두었습니다. 말씀하신대로 현재 단계에서는 data를 제거해도 문제가 되지는 않습니다. 삭제하셔도 무방합니다.
그러나 앞으로 localStorage에 일기 데이터를 보관하고 최초 접속시 꺼내와 State에 보관하는 과정에서 data의 값이 최초 빈 배열로 설정될 수 있으므로 현재는 설정되어 있는 상황입니다.
useEffect와 lifecycle문의
0
32
2
프론트엔드 학습 수준 문의
0
44
2
리액트 챕터별 코드에서 eslint 설정파일이 없어요
0
51
2
데이터 로딩중 화면만 계속 나와요!!
0
56
2
퍼블리셔일경우 어느정도 수준까지 강의를 들어야할까요
0
80
2
이후의 커리큘럼 문의
0
102
2
실슬환경 설정에서 save후 console.log 부분이 새로고침이 안되는현상입니다.
0
50
2
최적화 관련 질문있습니다 (useMemo 등)
0
85
3
프로바이더 컴포넌트의 위치는 어떤 기준인가요?
1
82
3
Date 객체에 관련하여 질문드립니다.
0
85
2
리액트 개정판 교재 질문
0
60
2
예제코드가 안나와요!
0
78
2
select a variant 선택에서 javascript와 javascript+react compiler 중 무엇을 선택해야하나요? com
0
109
2
onMouseEnter 관련 문의 드립니다
0
93
3
배열의 렌더링 관련 질문 드립니다.
0
73
2
2:40초 refObj를 콘솔로 출력시 오류가 발생합니다.
0
113
2
TS, 리액트 강의중에 뭘 먼저 수강하는게 좋을까요?
0
137
2
useCallback 적용한 onCreate, onUpdate, onDelete 함수..
0
71
1
vs code 자동완성관련 문의
0
113
2
91강 useEffect내에서 상태변화함수 호출시 발생하는 에러
1
181
2
87강 필터 함수 질문
0
69
2
useRef, useState count 비교
0
67
2
안된다고했던 이유가 무엇이었는지 모르겠습니다
0
91
2
85강에서 객체를 왜 클래스로 만들어서 new 하지 않는건지 궁금합니다.
0
76
2





