오늘은 나름? 까다로웠던 포커싱 동작과 관련된 에러 해결 내용이다.
리액트에서 사용할 간단한 Dialog 컴포넌트를 만들고, 자동으로 몇초 뒤 종료되도록 구현을 하였는데, Dialog가 보여지고 닫히는 순간 아래 에러가 발생하였다.
Blocked aria-hidden on a <button> element because the element that just received focus must not be hidden from assistive technology users. Avoid using aria-hidden on a focused element or its ancestor. Consider using the inert attribute instead, which will also prevent focus. For more details, see the aria-hidden section of the WAI-ARIA specification at https://w3c.github.io/aria/#aria-hidden
에러 내용은 대략적으로, Dialog를 나타나게 만들때 사용된 버튼 내에서 Dialog가 사라진 이후에, 포커싱을 해야하는 Dialog가 사라져서 안보이는 상태이니, 포커싱을 할 수 없다. 라는 의미인 듯 하다.
ChatGPT 및 이런저런 자료탐색을 하다가, 해결 방법으로 Dialog 컴포넌트에 disableAutoFocus 옵션을 true로 주어 해결하였다.
disableAutoFocus 옵션을 true로 주면, 애초에 Dialog가 열려있던, 닫혀있던 상태에 상관없이 그냥 자동포커싱을 하지않고 무시하겠다. 라는 뜻이 되므로, 에러가 발생할 원천적인 문제를 막아서 해결한 것이다.
문제가 발생한 이유를 조금 더 풀어서 정확하게 관찰해보면,
[버튼 클릭] -> [다이얼로그 표출] -> [다이얼로그의 특정 요소에 자동으로 포커싱] -> [다이얼로그 닫힘] -> [가려진 객체에는 포커싱을 할 수 없다!] 의 흐름에서 발생한 에러이다.
disableAutoFocus 옵션을 활성화화면, [다이얼로그의 특정 요소에 자동으로 포커싱] 부분에서 아무일도 일어나지 않으므로, 에러또한 발생하지 않게 된다.
'S급 프론트엔드 개발자로 회귀하다' 카테고리의 다른 글
자바스크립트란? Node란? (009화 - S급 프론트엔드 개발자로 회귀하다) (0) | 2025.01.08 |
---|---|
Docker build fail to install Insightface 해결방법 (008화 - S급 프론트엔드 개발자로 회귀하다) (0) | 2024.12.23 |
너의 모든 순간, 날짜 데이터를 관리해줄게 - moment.js (006화 - S급 프론트엔드 개발자로 회귀하다) (0) | 2024.07.11 |
Material-UI 사용기 - 레이아웃 미세 조정이 힘들면 개발자 도구로 (005화 - S급 프론트엔드 개발자로 회귀하다) (0) | 2024.07.08 |
List 구현하기 - 스크롤링을 하면 스크롤바가 덜덜 떨리네 (004화 - S급 프론트엔드 개발자로 회귀하다) (0) | 2024.07.08 |