inflearn logo
강의

Khóa học

Chia sẻ kiến thức

React.js vừa tầm một miếng ăn: Từ cơ bản đến thực tiễn

12.15) Triển khai trang Edit

존재하지 않는 일기 url입력 시 alert이 두 번 떠요

4

meong

1 câu hỏi đã được viết

0

안녕하세요

아래와 같이 코드를 작성하고 실행했는데

존재하지 않는 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;

javascript react node.js

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