# Component/DropdownInput > Props: component-dropdowninput.props.txt ## Examples ### Allow Custom Value options에 없는 값을 허용하기 위해 allowCustomValue을 활성화할 수 있습니다. ```tsx { render: () => { const [value, setValue] = useState('직접입력된 값'); return 저장된 값: {value} ; }, parameters: { docs: { description: { story: 'options에 없는 값을 허용하기 위해 allowCustomValue을 활성화할 수 있습니다.' } } } } ``` ### Base ```tsx { args: { width: 250, placeholder: 'select fruit' }, render: args => { const [value, onChange] = useState(); return { args.onChange?.(v); onChange(v); }} />; } } ``` ### Controlled ```tsx { render: () => { const [value, setValue] = useState(3); const handleButtonClick = () => { setValue(7); }; return ; } } ``` ### Disabled ```tsx { args: { width: 250, placeholder: 'select fruit' }, render: args => { const [value, onChange] = useState(); return { args.onChange?.(v); onChange(v); }} />; }, args: { width: 250, placeholder: 'select fruit', disabled: true } } ``` ### Error ```tsx { args: { width: 250, placeholder: 'select fruit' }, render: args => { const [value, onChange] = useState(); return { args.onChange?.(v); onChange(v); }} />; }, args: { width: 250, status: 'error', placeholder: 'select fruit' } } ``` ### Flip ```tsx { render: args => { const [value, onChange] = useState(); return
{ args.onChange?.(v); onChange(v); }} />
; }, args: { placeholder: '옵션 선택하기', options: options } } ``` ### Search 사용자가 입력한 값과 일치하는 결과가 Dropdown에 표시됩니다. ```tsx { render: () => { const [value, setValue] = useState('색상'); return label.includes(inputValue)} placeholder='색상 검색' options={[{ label: '골드', value: 'Gold' }, { label: '화이트 골드', value: 'White Gold' }, { label: '로즈 골드', value: 'Rose Gold' }, { label: '실버', value: 'Silver' }]} startElement={} endElement={null} /> ; }, parameters: { docs: { description: { story: '사용자가 입력한 값과 일치하는 결과가 Dropdown에 표시됩니다.' } } } } ``` ### Size ```tsx { render: () => } ``` ### Submit 사용자가 입력한 값과 일치하는 결과가 Dropdown에 표시됩니다. ```tsx { render: () => { const [value, setValue] = useState('색상'); return
{ e.preventDefault(); alert('onSubmit'); }}> label.includes(inputValue)} placeholder='색상 검색' options={[{ label: '골드', value: 'Gold' }, { label: '화이트 골드', value: 'White Gold' }, { label: '로즈 골드', value: 'Rose Gold' }, { label: '실버', value: 'Silver' }]} startElement={} endElement={null} /> { if (event.key === 'Enter') { event.preventDefault(); // 여기에 제출 로직을 추가할 수 있습니다. console.log('Submitted value:', value); } }} optionFilter={(inputValue, { label }) => label.includes(inputValue)} placeholder='색상 검색' options={[{ label: '골드', value: 'Gold' }, { label: '화이트 골드', value: 'White Gold' }, { label: '로즈 골드', value: 'Rose Gold' }, { label: '실버', value: 'Silver' }]} startElement={} endElement={null} />
; }, parameters: { docs: { description: { story: '사용자가 입력한 값과 일치하는 결과가 Dropdown에 표시됩니다.' } } } } ``` ### Test Composition 한글 입력시 Composition 세션에서 키보드 다운 이벤트가 발생되어 마지막에 입력한 글자가 2벌로 입력되는 경우가 있어 이를 방지하고 있습니다. ```tsx { render: () => { const [value, setValue] = useState('색상'); return ; }, parameters: { docs: { description: { story: '한글 입력시 Composition 세션에서 키보드 다운 이벤트가 발생되어 마지막에 입력한 글자가 2벌로 입력되는 경우가 있어 이를 방지하고 있습니다.' } } } } ``` ### Too Many Options ```tsx { args: { width: 250, placeholder: 'select option' }, render: args => { const [value, onChange] = useState(); const options = useMemo(() => { return Array.from({ length: 100_000 }).map((_, index) => ({ label: `option ${index}`, value: index })); }, []); return { args.onChange?.(v); onChange(v); }} />; } } ``` ### With Form Helper Text ```tsx { render: () => Error Message } ``` ### With Option Filter ```tsx { render: args => { const [value, onChange] = useState(); return label.includes(inputValue)} onChange={v => { args.onChange?.(v); onChange(v); }} />; } } ```