Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PCWEB-11978 ConfirmModal의 title props의 타입을 변경합니다. #114

Merged
merged 3 commits into from
Jan 12, 2024

Conversation

KimJeongHyun
Copy link
Contributor

@KimJeongHyun KimJeongHyun commented Jan 12, 2024

작업 내용 (Content) 📝

ConfirmModal의 title 타입을 string에서 JSX.Element도 받을 수 있도록 변경합니다.

career-web의 ts migration시, string만이 아닌 JSX.Element도 넘어가도록 작성된 js 파일들이 있어서 해당 케이스에 대한 대응 작업입니다.

스크린샷 (Screenshot) 📷

  • 필요하다면 스크린샷을 첨부해주세요.
  • Attach a Screenshot if necessary.

링크 (Links) 🔗

기타 사항 (Etc) 🔖

  • PR에 대한 추가 설명이나 작업하면서 고민이 되었던 부분 등
  • Additional information about this PR or any troubles working on this PR.
  • Merge 전 필요한 작업이 있다면 적어주세요 (Checklist before merge)
  • eg) Create XX table, Deploy app etc

테스트 Checklist (Test Checklist) ✅

  • 꼭 테스트 해봐야하는 시나리오를 적어주세요
  • eg) Test case

희망 리뷰 완료 일 (Expected due date) ⏰

202X.X.X. Wed

@@ -51,7 +51,7 @@ export interface ConfirmModalProps
> {
icon?: IconType;
type?: Type;
title?: string;
title?: string | JSX.Element;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거 ReactNode면 범위가 너무 넓어지나요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사용되는 곳이 career-web, profile-web, foa-v2, kairos 인데

모두 둘러봤을 때 career-web에서만 JSX를 넘기고 있기도 하고, deprecated될 부분이라 ReactNode타입까지는 굳이? 라는 생각이 들긴 했는데욥... 혹시 모르니 추가하는게 좋겠네요

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이미 머지가 되었지만... ReactNode에 JSX.Element가 포함되어 있지 않나요? @KimJeongHyun

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@saengmotmi
확인해보니 ReactNode에는 ReactElement가 포함되어있고, JSX.Element는 ReactElement를 확장한 타입이네용

declare namespace React {
  type ReactNode =
    | ReactElement
    | string
    | number
    | ReactFragment
    | ReactPortal
    | boolean
    | null
    | undefined;
}

여기서 구현상으로 같은 것은 ReactElement인데, JSX.Element와 다른 것은
JSX.Element는 ReactElement의 type과 props를 모두 any로 받게끔 확장된 global namespace 타입이에요.

https://www.totaltypescript.com/jsx-element-vs-react-reactnode
https://www.howdy-mj.me/react/react-node-and-jsx-element

Copy link
Contributor

@saengmotmi saengmotmi Jan 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네 근데 제 생각엔 JSX.Element(JSX 문법은 리액트의 전유물이 아니니...)를 리액트에서 쓰기 위해 한번 더 덮어 씌운게 ReactElement이고 이 타입이 ReactNode에 포함 되어 있으니, 그리고 ReactNode로 쓴다고 해서 별 다를 것도 없으니 굳이 유니온으로 표현해서 얻을게 없지 않나 하는 의견이었어요 @KimJeongHyun

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@saengmotmi 배포해서 확인해보니, string도 타입에 넣을 필요가 없었군요, ReactNode 안에 있으니
겸사겸사 그냥 ReactNode 받는걸로 하겠슴다.

@KimJeongHyun KimJeongHyun merged commit b031e93 into master Jan 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants