📍 프로그래밍 언어/TypeScript

[ TypeScript ] Date 객체를 React 컴포넌트에서 렌더링할 때 발생하는 타입 오류

shyunu 2025. 2. 23. 15:03
728x90

📍 발생 원인 

현재 이와 같이 타입과 변수를 설정한 상태입니다.

interface Example {
  no: number;
  date: Date;
}

const exampleList: Example[] = [
  {
    no: 1,
    date: new Date(2025, 1, 7), // 2025년 2월 7일 (월은 0부터 시작)
  },
  
  (...생략...)
  
]

 

하지만, 이와 같이 값을 불러오려했더니 에러가 발생하였습니다.

return <p>{example.date}</p>; // ❌ Type 'Date' is not assignable to type 'ReactNode'.

 

 

💡 포인트

React에서 JSX 내부에서 {}를 사용하여 값을 출력할 때, ReactNode(문자열, 숫자, JSX 요소 등)로 변환할 수 있어야 합니다.

하지만 Date 객체는 ReactNode가 아니므로 JSX에서 직접 출력할 경우 타입 오류가 발생합니다.

 

 


✅ 해결 방법

1. 문자열로 변환 (toLocaleDateString() 사용)

<p>{date.toLocaleDateString()}</p>; // ✅ 정상 출력

 

2. ISO 형식으로 변환 (toISOString() 사용)

<p>{date.toISOString().split("T")[0]}</p>; // ✅ "YYYY-MM-DD" 형식으로 출력

 

3. 템플릿 리터럴로 변환 (toDateString() 사용)

<p>{`${date.toDateString()}`}</p>; // ✅ 정상 출력

 

 


✨ 원하는 형식으로 날짜 변환하기

저는 해결방법 1의 형태로 작성하였는데 제가 원하는 형태는 예를 들어 2025.02.07 의 형태였습니다.

 

이때,

toLocaleDateString()의 옵션을 사용하면 원하는 형식으로 날짜를 출력할 수 있습니다.

<p>
  {example.date
  .toLocaleDateString("ko-KR", { year: "numeric", month: "2-digit", day: "2-digit" })
</p>

 

👉 출력 결과

 

 

추가적으로 일자 뒤에 . 이 오는 것도 삭제하고 싶어서 코드를 한 번 더 수정해주었습니다.

.replace(/\.$/, "") → 마지막에 오는 점(.)을 찾아서 제거

<p>
  {example.date
    .toLocaleDateString("ko-KR", { year: "numeric", month: "2-digit", day: "2-digit" })
    .replace(/\.$/, "")}
</p>

 

👉 출력 결과

728x90