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

refactor: preview 오류 해결 및 state Hoisting 검토 #197

Open
wants to merge 8 commits into
base: refactor-state-hoisting
Choose a base branch
from

Conversation

pengcon
Copy link
Collaborator

@pengcon pengcon commented Jan 9, 2025

👩‍🌾 진행한 작업

✅ NotificationScreenPreview 언어 한글로 변경
✅ CreateQuestionScreenPreview 오류 해결, 언어 한글로 변경
✅ CreateStudyScreenPreview 언어 한글로 변경
✅ OwnerQuizResultScreenPreview 오류 수정, 언어 한글로 변경
✅ GeneralQuizResultScreenPreview 오류 수정, 언어 한글로 변경
✅ QuestionDetailScreenPreview 오류 수정, 언어 한글로 변경

📷 작업 결과(사진)

NotificationScreenPreview CreateQuestionScreenPreview CreateStudyScreenPreview
OwnerQuizResultScreenPreview GeneralQuizResultScreenPreview

QuestionDetailScreenPreview

image

🗣️ 공유할 내용

프리뷰 살린 방법

프리뷰는 태환님의 블로그 글을 통해 오류를 해결하였습니다.
간단하게 설명드리면 저희가 상태를 가지고 있게 한 최상단 컴포저블이 Preview는 동작하지 않지만 외부에서 활용할 코드로 활용하는 용도였더라고요!

PreviewParameterProvider 활용

QuestionDetailScreenPreview는 객관식과 낱말맞추기 두개의 프리뷰가 필요합니다.
이 두개를 PreviewParameterProvider를 사용하면 프리뷰 한개로 각각 랜더링이 가능합니다~
드로이드 나이츠 참고하다 발견했고, 이 블로그 글을 읽으면 이해가 되실겁니다!

미리보기용 데이터 String 추출 여부

드로이드 나이츠를 보니 미리보기용 데이터에서 사용되는 String을 추출한것도있고 아닌곳도 있더라고요!
무슨 근거로 각각 그렇게 구성했는지 확인 후 저희 모두 일괄적으로 적용하면 좋을 것 같습니다!

State Hoisting

분명 브랜치 이름은 State Hoisting인데 원래도 다들 신경써주셔서 나름 잘 되어있어서 건들게 없었습니다😅
하지만 제가 공부하면서 느끼지만, 불필요한 것도 hoisting이 되어있다고 생각합니다!

예를들어 CreateQuestionScreen 에서 snackBarHostState와 focusRequester가 호이스팅 되어있는데,
Stateless하게 구성한 컴포저블 함수의 안에서만 쓰이기 때문에 호이스팅을 하여 얻는 이점이 거의 없는거 같습니다.
오히려 프리뷰에서도 snackBarHostState랑 focusRequester를 선언해줘야해서 불편함이 커집니다..!

공식문서에서도 무조건 호이스팅이 옳은게 아니다 라고 나와있고, (내부에서만 사용되면 호이스팅의 이점이 거의 없다 서술)
저희 프로젝트에서도 다른 스크린에선 snackBarHostState는 호이스팅을 안한 곳도 있더라고요.

제 기준에서 생각했을땐 snackBarHostState정도는 state를 내려줘도 될거같은데, 여러분의 생각도 듣고싶습니다~
(제 코드에는 토론 후에 적용하려고 snackBarHostState에 대한 호이스팅 변경은 하지 않았습니다~)
(토요일날 토론해봐도 좋을 거 같아요~)

closed #196

@pengcon pengcon added ♻️refactor 코드 리팩토링(기능 변경 없음) 🐧pengcon K041 이훈 labels Jan 9, 2025
@pengcon pengcon self-assigned this Jan 9, 2025
Copy link
Collaborator

@jay200333 jay200333 left a comment

Choose a reason for hiding this comment

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

고생하셨습니다. 😁

@Composable
fun QuestionDetailScreenPreview() {
fun QuestionDetailScreenPreview(
@PreviewParameter(QuestionDetailScreenPreviewParameterProvider::class) question: Question,
Copy link
Collaborator

Choose a reason for hiding this comment

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

Preview를 위한 클래스를 만들어두고 @PreviewParameter를 이용해 재사용 할 수 있군요. 좋은 방법인 것 같습니다. 😁

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐧pengcon K041 이훈 ♻️refactor 코드 리팩토링(기능 변경 없음)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants