존재하지 않는 일기 url입력 시 alert이 두 번 떠요
4
1 câu hỏi đã được viết
안녕하세요
아래와 같이 코드를 작성하고 실행했는데
존재하지 않는 id 로 이동 (예: /edit/111)하면
alert이 한번 뜨게되고 [확인]을누르면
url 은 홈으로 이동되고 동일한 alert이 또 한번 더 뜨게됩니다.
import Header from '../components/Header';
import Editor from '../components/Editor';
import Button from '../components/Button';
import { useParams, useNavigate } from 'react-router-dom';
import { useContext, useEffect, useState } from 'react';
import { DiaryStateContext, DiaryDispatchContext } from '../App';
const Edit = () => {
const params = useParams();
const nav = useNavigate();
const { onDelete, onUpdate } = useContext(DiaryDispatchContext);
const data = useContext(DiaryStateContext);
const [curDiaryItem, setCurDiaryItem] = useState();
/* const getCurrentDiaryItem = () => {
const currentDiaryItem = data.find((item) => String(item.id) === String(params.id));
if(!currentDiaryItem){
window.alert("존재하지 않는 일기입니다.");
// 마운트 되기 전에 동작하기 때문에 제대로 동작을 안함.
nav("/", { replace: true });
}
return currentDiaryItem;
} */
// 따라서 useEffect로 설정해줘야함
useEffect(()=>{
const currentDiaryItem = data.find((item) => String(item.id) === String(params.id));
if(!currentDiaryItem){
window.alert("존재하지 않는 일기입니다.");
nav("/", { replace: true });
}
setCurDiaryItem(currentDiaryItem);
}, [params.id])
const onSubmit = (input) => {
onUpdate(params.id, input.createdDate.getTime(), input.emotionId, input.content);
nav("/", { replace: true });
};
const onClickDelete = () =>{
if(window.confirm("일기를 삭제할까요? 다시 복구되지 않아요!")){
onDelete(params.id);
// 이벤트 함수 안에 있기 때문에 마운트 이후 수행됨.
nav("/", { replace: true });
}
}
return (
<div>
<Header
title={"일기 수정하기"}
leftChild={<Button text={"< 뒤로가기"} onClick={() => nav(-1)} />}
rightChild={<Button text={"삭제하기"} type={"NEGATIVE"} onClick={onClickDelete}/>}
/>
<Editor initData={curDiaryItem} onSubmit={(input) => {
onSubmit(input);
}} />
</div>
)
}
export default Edit;
Câu trả lời 0
교재(3쇄)와 강의 내용 문의
0
26
2
12.13) 하단 여백 스타일링 관련 질문 드립니다.
0
65
2
에러 질문드립니다
0
63
2
VSCode 설정 문의
0
66
2
PPT 코드 관련 질문
0
48
2
useEffect와 lifecycle문의
0
63
2
프론트엔드 학습 수준 문의
0
77
2
리액트 챕터별 코드에서 eslint 설정파일이 없어요
0
67
2
데이터 로딩중 화면만 계속 나와요!!
0
71
2
퍼블리셔일경우 어느정도 수준까지 강의를 들어야할까요
0
99
2
이후의 커리큘럼 문의
0
122
2
실슬환경 설정에서 save후 console.log 부분이 새로고침이 안되는현상입니다.
0
71
2
최적화 관련 질문있습니다 (useMemo 등)
0
103
3
프로바이더 컴포넌트의 위치는 어떤 기준인가요?
1
95
3
Date 객체에 관련하여 질문드립니다.
0
96
2
리액트 개정판 교재 질문
0
75
2
예제코드가 안나와요!
0
85
2
select a variant 선택에서 javascript와 javascript+react compiler 중 무엇을 선택해야하나요? com
0
130
2
onMouseEnter 관련 문의 드립니다
0
110
3
배열의 렌더링 관련 질문 드립니다.
0
82
2
2:40초 refObj를 콘솔로 출력시 오류가 발생합니다.
0
128
2
TS, 리액트 강의중에 뭘 먼저 수강하는게 좋을까요?
0
150
2
useCallback 적용한 onCreate, onUpdate, onDelete 함수..
0
72
1
vs code 자동완성관련 문의
0
177
2

