-
Notifications
You must be signed in to change notification settings - Fork 2
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
[FE] 리뷰 작성 페이지에서 동적으로 에러가 생기는 경우, 해당 에러를 읽어주는 기능 #891
[FE] 리뷰 작성 페이지에서 동적으로 에러가 생기는 경우, 해당 에러를 읽어주는 기능 #891
Conversation
1. Checkbox와 CheckboxItem의 탭 포커스 분리 2. CheckboxItem에 포커싱됐을 때 엔터를 누르면 해당 체크박스를 선택할 수 있는 기능 추가 3. CheckboxItem의 focus시 outline 색상을 primary로 변경
@@ -51,7 +53,9 @@ const MultipleChoiceAnswer = ({ question }: MultipleChoiceAnswerProps) => { | |||
))} | |||
<S.LimitGuideMessage> | |||
{isOpenLimitGuide && ( | |||
<p data-testid="limitGuideMessage">😅 최대 {question.optionGroup?.maxCount}개까지 선택가능해요</p> | |||
<p data-testid="limitGuideMessage" tabIndex={-1} ref={messageRef} aria-live="assertive"> | |||
😅 최대 {question.optionGroup?.maxCount}개까지 선택가능해요 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이모지는 읽어주지 않는게 좋을 것 같아요. 이모지를 이미지로 빼서, alt ="" 로 하는 것 추천합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
올리 스크린 리더기 사용하면서 구현하느라 고생했어요
갤럭시 talkback 으로 메세지 읽어주는 것 확인했어요
이모지를 읽어주는게 당황스럽지만, 큰 문제는 아니고 배포가 앞에 있어서 우선 approve할게요. 시간날 때 해당 사항도 고치면 좋겠습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
에러 메시지 읽어주는 것 확인했습니다~~ 올리 수고했어요!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 확인했어요! 오전 중으로 스크린 리더 확인해서 Approve하겠습니다 :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
스크린 리더로 에러 읽어주는 것 확인했습니다 :)
…om/woowacourse-teams/2024-review-me into fe/feat/890-read-review-writing-error-message
…eview-me into fe/feat/890-read-review-writing-error-message
* feat: Checkbox 선택 여부를 스크린 리더 사용자에게 안내하는 기능 추가 * feat: 탭 접근성 강화 1. Checkbox와 CheckboxItem의 탭 포커스 분리 2. CheckboxItem에 포커싱됐을 때 엔터를 누르면 해당 체크박스를 선택할 수 있는 기능 추가 3. CheckboxItem의 focus시 outline 색상을 primary로 변경 * feat: 에러 메세지가 등장하는 경우 해당 에러 메세지 컴포넌트에 포커스를 주는 훅 작성 * feat: useFocusMessage 훅 적용 * feat: CheckboxItem을 전체 선택했을 때도 선택 여부를 알려주도록 변경 * refactor: handleKeyDown 이벤트 핸들러에서 사용하는 ChangeEvent 타입 캐스팅을 partial을 사용해 명확하게 변경 * refactor: 업데이트된 sr-only 스타일 반영
🚀 어떤 기능을 구현했나요 ?
🔥 어떻게 해결했나요 ?
에러 메세지 읽기
aria-live: ‘assertive’
로 에러 메세지가 뜨면 읽게 하려고 했습니다.assertive
로 설정해도 메세지가 뜨면 포커스가 갑자기 화면(웹뷰) 전체로 나가면서 “리뷰미, 최대 2개까지~”로 읽어주더라고요. 사용자가 바로 알아야 하는 정보 앞에 사족이 붙어서 사용자 입장에서 조금 당황스러울 수 있을 것 같았습니다.useRef
와useEffect
를 사용해 메세지가 활성화될 때 focus를 강제로 옮겨 메세지만 바로 읽어주도록 했습니다. 뭔가 화려한 훅들이 2개나 붙었지만 메세지를 바로 읽어주지 않으니 사용성이 떨어지더라구요.aria-live
만 살려도 될 것 같습니다.onBlur
이벤트로 띄워서 그런지 (모바일) 스크린 리더를 사용할 때 자연스럽게onBlur
를 트리거하기가 까다로웠습니다.onBlur
를 트리거하려고 하면 자꾸 다른 요소가 탭돼서 읽히는 경우가 훨씬 많아서, 어쩔 수 없이 2차 방어를 위해aria-live: ‘assertive’
도 추가했습니다.aria-live
가 트리거되면 “리뷰미, 최대 20자까지…”로 읽어서 조금의 딜레이가 생기긴 하지만 에러 메세지가 생기면 무조건 읽어줍니다.useFocusMessage 훅
📝 어떤 부분에 집중해서 리뷰해야 할까요?
📚 참고 자료, 할 말