inflearn logo
강의

講義

知識共有

一口サイズで食べるReact(React.js):基礎から実践まで

12.15) Edit ページの実装

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

解決済みの質問

80

meong

投稿した質問数 1

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

回答 1

0

winterlood

안녕하세요 멍이님 이정환입니다.

해당 이슈는 아래 캡쳐 남겨드린 것 처럼 바로 다음 챕터에서 다루고 있습니다. 참고 부탁드립니다 😀

image.png

0

meong

안녕하세요.

질문에 올린 코드에서도 이미 해당 내용을 읽고 의존성 배열의 값을 id로 해두었는데도 발생합니다..ㅠㅜ

useEffect(()=>{
        const currentDiaryItem = data.find((item) => String(item.id) === String(params.id));
        
        if(!currentDiaryItem){
            window.alert("존재하지 않는 일기입니다.");
            nav("/", { replace: true });
        }

        setCurDiaryItem(currentDiaryItem);
    }, [params.id])

0

meong

다음 챕터에서 다루는 이슈는

<Edit 페이지에서 일기를 수정했을 때 "존재하지 않는 일기입니다" 라는 얼럿이 발생> 인데

저는 <홈에서 Edit 페이지로 이동할 때 존재하지 않는 아이디를 넘길 경우 얼럿이 두 차례 발생>인 상황입니다...

0

winterlood

안녕하세요 이정환입니다

질문가이드라인에 올려드린대로 전체 프로젝트 코드를 깃허브 링크로 전달해주시면 정확한 원인 파악이 가능합니다.

다만 ㅠㅠ 현재 제가 휴가중에 있어 금주 금요일 오전 중으로 회신드리겠습니다!

eslint 플러그인 설정

0

54

2

감정일기장 다이어리 필터 적용할때 컨텍스트를 Home에서 가져오는 특별한 이유가 궁금합니다.

0

51

2

Editor Component의 최적화 불가능 이슈

0

73

2

useCallback ⊂ useMemo

0

65

2

라이브러리 설치 질문

0

79

2

linter 질문

0

87

2

감정일기장 vercel 배포 후 새로 고침 시 404페이지가 뜨는 이유

0

72

2

Sort 메서드 관련 아티클

0

74

2

4.1) React.js를 소개합니다 강의를 듣고 궁금한 점이 생겼습니다.

0

71

2

html, body에 적용하는 css 스타일 질문입니다.

0

75

2

eslint.config.js 설정 질문입니다.

0

132

2

교재(3쇄)와 강의 내용 문의

0

92

2

12.13) 하단 여백 스타일링 관련 질문 드립니다.

0

111

2

에러 질문드립니다

0

144

2

VSCode 설정 문의

0

178

2

PPT 코드 관련 질문

0

88

2

useEffect와 lifecycle문의

0

106

2

프론트엔드 학습 수준 문의

0

121

2

리액트 챕터별 코드에서 eslint 설정파일이 없어요

0

137

2

데이터 로딩중 화면만 계속 나와요!!

0

124

2

퍼블리셔일경우 어느정도 수준까지 강의를 들어야할까요

0

154

2

이후의 커리큘럼 문의

0

169

2

실슬환경 설정에서 save후 console.log 부분이 새로고침이 안되는현상입니다.

0

152

2

최적화 관련 질문있습니다 (useMemo 등)

0

161

3