피드로 돌아가기
Focus Issues and Refinement Support
Dev.toDev.to
Frontend

React 기반 Accessibility 내비게이션의 Focus Trap 제거 및 계층적 상태 관리 설계

Focus Issues and Refinement Support

ShaynaProductions2026년 6월 16일10intermediate

Context

React 19 기반의 메인 내비게이션 컴포넌트 구현 중 Shift+Tab 진입 시 발생하는 Keyboard Trap 현상 식별. 닫혀 있는 Sublist 내의 요소에 포커스가 도달할 때 시각적 Focus Outline이 사라지는 Accessibility 결함 해결 필요.

Technical Solution

  • onFocus 이벤트 리스너를 통한 Focus 상태 실시간 감지 및 handleLinkFocus 로직으로의 위임 구조 설계
  • 컴포넌트 내 마지막 요소 판별 로직(_isLastElementInComponent)을 통해 포커스 대상이 Closed Sublist 내에 있는지 검증
  • 조건 충족 시 shiftFocus 함수를 호출하여 최상위 Top-row Parent 버튼으로 포커스를 강제 이동시키는 포커스 리디렉션 메커니즘 구현
  • NavigationProvider 내에 dispatchSubListClose 함수를 주입하여 각 내비게이션 아이템이 독립적으로 상태를 제어하는 구조 채택
  • registerButtonAsParent 함수와 Map 객체를 활용하여 Parent Element와 Close Function을 매핑하는 상태 등록 체계 구축
  • useEffect를 통한 컴포넌트 마운트 시점의 자동 등록 프로세스로 Sublist 닫힘 동작을 위한 인프라스트럭처 완성

1. Keyboard Navigation 구현 시 `onFocus` 핸들러를 통해 현재 포커스 위치가 논리적 가시 상태(Expanded/Collapsed)와 일치하는지 검증할 것

2. 복잡한 트리 구조의 UI에서 상태 변경 함수를 하위 컴포넌트로 전달할 때, Provider 패턴을 통해 의존성을 주입하고 매핑 테이블로 관리하여 렌더링 최적화를 고려할 것

3. Screen Reader 사용자를 위해 포커스 이동 시 시각적 Outline이 소실되지 않도록 포커스 리디렉션 로직을 설계할 것

원문 읽기