해결된 질문
작성
·
82
0
const Diary = () => {
const params = useParams();
const nav = useNavigate();
const currentDiaryItem = useDiary(params.id);
if (!currentDiaryItem) {
return <div>데이터로딩중</div>;
}
const { createdDate, emotionId, content } = currentDiaryItem;
const Edit = () => {
const nav = useNavigate();
const { onDelete, onUpdate } = useContext(DiaryDispatchContext);
const params = useParams();
const currentDiaryItem = useDiary(params.id);
Diary컴포넌트와 Edit컴포넌트 둘 다 useDiary로부터 currentDiaryItem을 받아오고 있는데, Diary는 undefined일 때경우를 처리해주고 있는데, Edit컴포넌트는 그렇지 않습니다.
useEffect(() => {
if (initData) { // undefined일 때
setInput({
...initData,
createdDate: new Date(Number(initData.createdDate)),
});
}
}, [initData]);
위코드는 Editor컴포넌트 안의 코드입니다. 여기서 undefined룰 걸려주기 때문에 Edit컴포넌트에서 처리를 안해도 되는 건가용?
답변 2
0
안녕하세요 이정환입니다.
Diary 컴포넌트에서는 실제 일기 데이터를 불러오기 전에 화면이 렌더링 되지 않을 수 있도록 조건문을 통해 처리해 주었습니다.
그러나 Edit 컴포넌트에서는 일기 데이터를 불리오기 전에 화면이 렌더링 된다고 해도 수정폼으로 렌더링 되기 때문에 큰 문제가 없어 특별히 조건문을 추가하지 않았습니다.
원하시면 Edit 컴포넌트에도 조건문을 추가하셔서 로딩중을 표시하시면 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다.
2145007님이 질문 주신 내용에 대해 설명드리겠습니다. 리액트 컴포넌트에서 데이터가 없는 경우에 대한 처리는 사용자 경험 측면에서 매우 중요한 요소 중 하나입니다.
질문에서 언급하신 부분은 useDiary
커스텀 훅을 통해 불러온 currentDiaryItem
이 undefined
인 경우에 대한 처리 방식입니다.
Diary
컴포넌트에서는 currentDiaryItem
이 undefined
일 경우에 "데이터 로딩 중"
이라고 화면에 표시합니다. 이는 명시적으로 로딩 상태를 사용자에게 알림으로써 비어 있는 데이터를 처리하는 한 방법입니다.
반면, Edit
컴포넌트에서는 currentDiaryItem
에 대한 undefined
체크가 추가적으로 되어 있지 않은 것을 확인하셨습니다. 이러한 경우, Edit
컴포넌트에서 initData
를 설정하는 과정(useEffect
활용)에 대해 자동화된 처리가 이루어지고 있는지 확인할 필요가 있습니다.
Editor
컴포넌트의 useEffect
코드에서는 initData
가 존재할 경우에만 세팅 작업을 수행하도록 설계되어 있습니다. 즉, initData
가 undefined
인 경우 초기화 작업이 수행되지 않습니다. 하지만, 이 부분이 Edit
컴포넌트에서 불충분한 경우라면 추가적인 체크를 통해 currentDiaryItem
이 undefined
일 경우를 대비한 예외 처리가 필요할 수 있습니다.
적절한 사례로, currentDiaryItem
이 undefined
인 상황에는 해당 컴포넌트에서도 적절한 메시지를 출력하거나, 데이터를 다시 불러오도록 처리하는 옵션이 있을 수 있습니다.
Edit
컴포넌트에서도 currentDiaryItem
이 undefined
인지 체크하여 사용자에게 응답을 제공하는 것이 좋습니다.관련 질문 및 추가적인 정보는 아래의 링크에서 확인하실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.