개발자
공식문서 - https://headlessui.com/react/listbox listbox를 사용하는데 select 항목 안에도 button을 만들어서 option을 선택할 때가 아닌 button을 클릭할 때 select를 적용하고 싶은데요. button을 누르면 select항목을 닫고 싶습니다. 어떻게 해야 닫을 수 있나요? 지금은 버튼눌러도 아무 동작을 안합니다 ㅠ
답변 2
Headless UI의 Listbox에서 닫기 동작을 추가하려면, useRef와 useEffect를 사용하여 Listbox 인스턴스에 대한 참조를 만들어야 합니다. 이를 사용하여 '선택!' 버튼을 클릭할 때 Listbox를 닫도록 설정할 수 있습니다. 코드는 다음과 같이 작성할 수 있습니다. 아래 코드는 useRef를 사용하여 Listbox 인스턴스에 대한 참조를 만들고, 이를 통해 버튼을 클릭했을 때 Listbox를 닫을 수 있도록 설정합니다. 또한 useEffect를 사용하여 선택된 사람이 변경될 때마다 Listbox를 업데이트합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
import { useState, useRef, useEffect } from 'react'; import { Listbox } from '@headlessui/react'; const people = [ { id: 1, name: 'Durward Reynolds' }, { id: 2, name: 'Kenton Towne' }, { id: 3, name: 'Therese Wunsch' }, { id: 4, name: 'Benedict Kessler' }, { id: 5, name: 'Katelyn Rohan' }, ]; function MyListbox() { const [selectedPeople, setSelectedPeople] = useState([people[0], people[1]]); const listboxRef = useRef(); useEffect(() => { if (listboxRef.current) { listboxRef.current.forceUpdate(); } }, [selectedPeople]); return ( <Listbox ref={listboxRef} value={selectedPeople} onChange={setSelectedPeople} multiple > <Listbox.Button> {selectedPeople.map((person) => person.name).join(', ')} </Listbox.Button> <Listbox.Options> {people.map((person) => ( <Listbox.Option key={person.id} value={person}> {person.name} </Listbox.Option> ))} <button onClick={() => { if (listboxRef.current) { listboxRef.current.close(); } }} > 선택! </button> </Listbox.Options> </Listbox> ); }
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!