[AI 감성 일기장] Diary 페이지 일기 상세보기 기능 구현

Dev Log

Diary 페이지에서 특정 일기를 불러와 상세 내용을 보여주는 기능을 구현했다.
URL 파라미터로 전달된 일기 ID를 통해 데이터를 조회하고, 존재하지 않는 일기에 대한 예외 처리도 추가했다.

일기 데이터 불러오기

useDiary 커스텀 훅

특정 ID의 일기를 찾아 반환하는 커스텀 훅을 구현했다.

const data = useContext(DiaryStateContext);

DiaryStateContext를 통해 전역에서 관리되는 일기 데이터에 접근한다.

 

특정 일기 찾기 및 예외 처리

const [curDiaryItem, setCurDiaryItem] = useState<DiaryType>();

useEffect(() => {
  const currentDiaryItem = data.find((item) => item.id === id);

  // 예외 처리
  if (!currentDiaryItem) {
    toast.error("존재하지 않는 일기입니다 🫢");
    nav("/", { replace: true });
  }

  // 찾은 일기 데이터를 로컬 상태에 저장
  setCurDiaryItem(currentDiaryItem);
}, [id, data, nav]);

return curDiaryItem;
  • 전달받은 id를 사용해 일기 데이터 검색
  • useEffect로 컴포넌트 렌더링 시 일기 데이터 조회
  • 해당 ID의 일기가 없으면 토스트 알림 후 홈으로 리다이렉트
  • 찾은 일기는 curDiaryItem 상태에 저장하여 반환

 

일기 상세보기

Diray 컴포넌트

URL 파라미터에서 일기 ID를 추출하고, useDiary 훅으로 해당 일기를 가져온다.

const params = useParams();
const id = Number(params.id);

const curDiaryItem = useDiary(id);
const { createdDate, emotion, content } = curDiaryItem;

 

Viewer 연동

가져온 일기 데이터를 Viewer 컴포넌트에 전달하여 화면에 렌더링한다.

<Viewer emotion={emotion} content={content} />

 

Viewer 컴포넌트

전달받은 감정과 내용을 화면에 표시한다.

export default function Viewer({ emotion, content }: ViewerProps) {
  return (
    <>
      {/* 감정 */}
      <div>{emotionInfo[emotion].name}</div>
      {/* 일기 내용 */}
      <div>{content}</div>
    </>
  );
}

'Dev Log' 카테고리의 다른 글

[AI 감성 일기장] GPT API를 활용한 AI 답장 기능 구현  (0) 2025.11.07
[AI 감성 일기장] Tailwind CSS와 Context API를 활용한 다크모드 구현  (0) 2025.11.07
[AI 감성 일기장] New 페이지 일기 작성 기능 구현  (0) 2025.11.07
[AI 감성 일기장] Home 페이지 날짜 관리 및 정렬 기능 구현  (0) 2025.11.07
[AI 감성 일기장] TypeScript에서 toSorted 메서드 인식 오류 해결  (0) 2025.11.07
'Dev Log' 카테고리의 다른 글
  • [AI 감성 일기장] GPT API를 활용한 AI 답장 기능 구현
  • [AI 감성 일기장] Tailwind CSS와 Context API를 활용한 다크모드 구현
  • [AI 감성 일기장] New 페이지 일기 작성 기능 구현
  • [AI 감성 일기장] Home 페이지 날짜 관리 및 정렬 기능 구현
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    제네릭
    타입 좁히기
    Next.js
    바닐라 자바스크립트
    Spa
    트러블 슈팅
    javascript
    앱 라우터
    자료구조
    알고리즘
    generic
    문자열
    클래스
    emotion diary
    react
    useState
    Trouble Shooting
    memory
    페이지 라우터
    C
    배열
    인터페이스
    algorithm
    ai 감성 일기장
    CS
    cs50
    함수 타입
    Pages Router
    App Router
    typescript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[AI 감성 일기장] Diary 페이지 일기 상세보기 기능 구현
상단으로

티스토리툴바