0Pricing
React Academy · 강의

제안 목록의 키보드 탐색

마우스 없이 제안을 탐색하고 선택하도록 ArrowUp, ArrowDown, Enter, Escape 키를 처리합니다.

제안 목록의 키보드 탐색은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

입력에서 onKeyDown 처리하기

키보드 처리기를 onKeyPress(더 이상 사용되지 않음)나 onKeyUp이 아니라 입력 요소의 onKeyDown 이벤트에 연결하십시오. keyDown은 문자가 입력에 나타나기 전에 실행되므로 기본 브라우저 동작이 적용되기 전에 ArrowDown, ArrowUp, 엔터, 이스케이프를 가로챌 수 있습니다.

ArrowDown 키 동작

사용자가 ArrowDown을 누르면 selectedIndex를 1 증가시키되, 최댓값을 suggestions.length - 1로 제한하십시오: setSelectedIndex(prev => Math.min(prev + 1, suggestions.length - 1)). 또한 e.preventDefault()를 호출하여 입력 텍스트의 커서가 끝으로 이동하지 않게 하십시오. 텍스트 입력에서 ArrowDown을 눌렀을 때 커서가 끝으로 이동하는 것이 기본 브라우저 동작이기 때문입니다.

ArrowUp 키 동작

사용자가 ArrowUp을 누르면 selectedIndex를 1 감소시키되, 최솟값을 0으로 제한하십시오: setSelectedIndex(prev => Math.max(prev - 1, 0)). 또는 인덱스 0보다 위로 이동할 때 -1(선택 항목 없음)까지 제한하여 사용자가 선택을 해제하고 자유롭게 입력하도록 할 수도 있습니다.

엔터 키 동작

엔터를 눌렀을 때 selectedIndex >= 0이면 강조 표시된 제안 항목을 선택하십시오. inputValue를 suggestions[selectedIndex]로 설정하고, 드롭다운을 닫은 다음 selectedIndex를 -1로 재설정합니다. 강조 표시된 제안 항목이 없으면(selectedIndex가 -1이면) 일반적인 양식 제출 또는 검색 동작이 진행되도록 두십시오.

이스케이프 키 동작

이스케이프를 누르면 isOpen을 false로 설정하여 드롭다운을 닫고 selectedIndex를 -1로 재설정하십시오. 입력 값은 지우지 마십시오. 사용자는 제안 항목을 선택하지 않고 닫기만 원하며, 추가로 편집할 수 있도록 입력한 텍스트를 유지하려는 것입니다.

탭 키 동작

탭을 누르면 브라우저가 어차피 다음 포커스 가능 요소로 포커스를 이동하므로 드롭다운을 닫으십시오. 탭을 눌렀을 때 isOpen을 false로 설정하면 포커스가 입력을 떠난 후에도 드롭다운이 열린 상태로 남지 않습니다. preventDefault()를 호출할 필요는 없습니다. 브라우저가 기본 탭 순서를 처리하도록 두십시오.

선택된 행의 시각적 강조 표시

강조 표시된 제안 항목은 시각적으로 구분되어야 합니다. selectedIndex에 해당하는 제안 항목에 활성 스타일을 적용하십시오: className={index === selectedIndex ? 'suggestion suggestion--active' : 'suggestion'}. 활성 상태에는 일반적으로 배경색 변경을 사용하여 엔터를 눌렀을 때 어떤 항목이 선택될지 명확하게 표시합니다.

선택된 항목을 화면에 표시되도록 스크롤하기

제안 목록에 최대 높이가 설정되어 스크롤되는 경우 키보드로 탐색하는 동안 강조 표시된 항목이 화면 밖으로 스크롤될 수 있습니다. 참조 배열에 제안 항목의 DOM 요소를 저장하고 selectedIndex가 변경될 때마다 listItemRefs.current[selectedIndex]?.scrollIntoView({ block: 'nearest' })를 호출하십시오. nearest 블록 값은 스크롤 양을 최소화합니다.

제안 항목 변경 시 selectedIndex 동기화

입력이 변경되어 새로 필터링된 목록이 나타나면 같은 상태 업데이트에서 selectedIndex를 -1로 재설정하거나, 제안 항목에 의존하는 useEffect에서 재설정하십시오. 제거된 항목을 가리키는 오래된 인덱스가 남아 있으면 사용자가 잘못된 제안 항목을 선택하게 됩니다.

전체 키보드 탐색 흐름

전체 사용자 흐름은 다음과 같습니다. 사용자가 입력하여 필터링하고, ArrowDown으로 첫 번째 항목을 강조하며, ArrowDown을 더 눌러 목록을 이동하고, ArrowUp으로 위로 돌아가며, 엔터로 강조된 항목을 선택하고, 이스케이프로 선택하지 않은 채 닫습니다. 이는 사용자가 자동 완성 필드에서 기대하는 모든 표준 키보드 상호작용 방식을 다룹니다.

화살표 키의 기본 동작 방지

텍스트 입력 안에서 ArrowDown과 ArrowUp을 처리할 때는 항상 e.preventDefault()를 호출하십시오. 그렇지 않으면 ArrowDown은 텍스트 커서를 끝으로 이동시키고 ArrowUp은 커서를 처음으로 이동시킵니다. 이러한 커서 이동은 선택 인덱스를 사용한 탐색과 충돌하여 혼란스러운 동작을 만들 수 있습니다.

키보드 탐색 키 매핑

사용자가 selectedIndex = 2에서 제안 항목이 강조된 상태로 엔터를 누르면 어떻게 됩니까?

강의 복습: 키보드 탐색

입력 요소에서 onKeyDown을 처리합니다. ArrowDown은 selectedIndex를 최댓값으로 제한하면서 증가시키고, ArrowUp은 0 또는 -1로 제한하면서 감소시킵니다. Enter 키는 강조된 항목을 선택하고, Escape 키는 선택하지 않고 닫으며, Tab 키는 닫은 뒤 브라우저가 포커스를 이동하도록 합니다. 화살표 키에서는 항상 preventDefault를 호출하고 강조된 항목이 보이도록 스크롤합니다.

자주 묻는 질문

“제안 목록의 키보드 탐색” 강의는 무료인가요?

네 — “제안 목록의 키보드 탐색” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“제안 목록의 키보드 탐색”에서 뭘 배우나요?

마우스 없이 제안을 탐색하고 선택하도록 ArrowUp, ArrowDown, Enter, Escape 키를 처리합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

React Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“제안 목록의 키보드 탐색” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 제안 목록이 있는 제어 입력
  2. 제안 목록의 키보드 탐색
  3. 디바운스를 적용한 비동기 제안
  4. 자동 완성 위젯의 접근성
← React Academy(으)로 돌아가기