React Select
Ignite UI for React Select 구성 요소를 사용하면 드롭다운에 배치된 항목 목록에서 단일 항목을 선택할 수 있습니다. 이 양식 컨트롤은 단일 또는 여러 문자 일치를 기반으로 선택을 포함한 빠른 항목 목록 탐색을 제공합니다.
React Select 예시
import React from "react" ;
import ReactDOM from "react-dom/client" ;
import { IgrSelectModule, IgrSelectItemModule, IgrSelect, IgrSelectItem } from "@infragistics/igniteui-react" ;
import "igniteui-webcomponents/themes/light/bootstrap.css" ;
IgrSelectModule.register();
IgrSelectItemModule.register();
export default function SelectOverview() {
return (
<div className ="sample" >
<IgrSelect >
<IgrSelectItem value ="Orange" > <span > Orange</span > </IgrSelectItem >
<IgrSelectItem value ="Apple" > <span > Apple</span > </IgrSelectItem >
<IgrSelectItem value ="Banana" > <span > Banana</span > </IgrSelectItem >
<IgrSelectItem value ="Mango" > <span > Mango</span > </IgrSelectItem >
</IgrSelect >
</div >
);
}
const root = ReactDOM.createRoot (document.getElementById("root" ));
root.render (<SelectOverview /> );
tsx コピー
이 샘플이 마음에 드시나요? Ignite UI for React 전체에 액세스하고 몇 분 만에 나만의 앱을 빌드하기 시작하세요. 무료로 다운로드하세요.
용법
먼저, 다음 명령을 실행하여 Ignite UI for React 설치해야 합니다.
npm install igniteui-react
cmd
그런 다음 필요한 IgrSelectItem
CSS를 IgrSelect
가져 와서 다음과 같이 모듈을 등록해야합니다.
import { IgrSelectModule, IgrSelect, IgrSelectItemModule, IgrSelectItem } from 'igniteui-react' ;
import 'igniteui-webcomponents/themes/light/bootstrap.css' ;
IgrSelectModule.register();
IgrSelectItemModule.register();
tsx
선택 헤더 및 그룹 구성 요소는 사용을 원하지 않는 한 필수 사항이 아닙니다.
구성 요소 사용을 시작하려면 선택할 목록과 IgrSelectItem
함께 를 IgrSelect
추가합니다.
<IgrSelect >
<IgrSelectItem value ="Orange" > <span > Orange</span > </IgrSelectItem >
<IgrSelectItem value ="Apple" > <span > Apple</span > </IgrSelectItem >
<IgrSelectItem value ="Banana" > <span > Banana</span > </IgrSelectItem >
<IgrSelectItem value ="Mango" > <span > Mango</span > </IgrSelectItem >
</IgrSelect >
tsx
선택하다
IgrSelect
구성 요소는 구성 요소 내에서 Form
사용할 수 있으므로 등록할 속성을 노출 name
합니다. 또한 a label
와 placeholder
속성이 있습니다. 이 outlined
속성은 Material 테마와 관련하여 스타일 지정 목적으로만 사용됩니다. 기본 슬롯을 제외하고 구성 요소는 , footer
, helper-text
, prefix
,를 suffix
toggle-icon
포함한 header
몇 가지 다른 슬롯을 제공합니다. 구성 요소 크기는 CSS 변수를 사용하여--ig-size
변경할 수 있습니다.
안건
이 IgrSelectItem
구성 요소를 사용하면 사용자가 사용할 옵션 목록을 선언적으로 지정할 수 있습니다. IgrSelect
제어. 각 항목은 value
선택 시 전달하는 데이터를 나타내는 속성입니다. 이 IgrSelectItem
항목의 텍스트 내용을 지정할 수 있는 기본 슬롯이 있습니다. 이 텍스트 내용은 다음과 같은 경우 값으로 사용됩니다. value
속성이 에 없습니다. IgrSelectItem
. 또한 이전 또는 이후에 렌더링할 사용자 지정 콘텐츠를 제공할 수도 있습니다. IgrSelectItem
를 사용하는 콘텐츠 prefix
그리고 suffix
슬롯. 를 설정하여 선택한 항목을 미리 정의할 수 있습니다. Selected
재산. 를 통해 일부 또는 모든 항목을 비활성화할 수도 있습니다. disabled
재산.
import React , { useEffect } from "react" ;
import ReactDOM from "react-dom/client" ;
import {
IgrSelectModule,
IgrSelectItemModule,
IgrIconModule,
IgrSelect,
IgrSelectItem,
IgrIcon,
registerIconFromText,
} from "@infragistics/igniteui-react" ;
import "./index.css" ;
import "igniteui-webcomponents/themes/light/bootstrap.css" ;
IgrSelectModule.register();
IgrSelectItemModule.register();
IgrIconModule.register();
const hotelSvg =
'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M7 14c1.66 0 3-1.34 3-3S8.66 8 7 8s-3 1.34-3 3 1.34 3 3 3zm0-4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm12-3h-8v8H3V5H1v15h2v-3h18v3h2v-9c0-2.21-1.79-4-4-4zm2 8h-8V9h6c1.1 0 2 .9 2 2v4z"/></svg>' ;
const grocerySvg =
'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zm10 0c-1.1 0-1.99.9-1.99 2s.89 2 1.99 2 2-.9 2-2-.9-2-2-2zm-1.45-5c.75 0 1.41-.41 1.75-1.03l3.58-6.49c.37-.66-.11-1.48-.87-1.48H5.21l-.94-2H1v2h2l3.6 7.59-1.35 2.44C4.52 15.37 5.48 17 7 17h12v-2H7l1.1-2h7.45zM6.16 6h12.15l-2.76 5H8.53L6.16 6z"/></svg>' ;
const restaurantSvg =
'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M16 6v8h3v8h2V2c-2.76 0-5 2.24-5 4zm-5 3H9V2H7v7H5V2H3v7c0 2.21 1.79 4 4 4v9h2v-9c2.21 0 4-1.79 4-4V2h-2v7z"/></svg>' ;
export default function SelectItem() {
useEffect(() => {
registerIconFromText("hotel" , hotelSvg, "material" );
registerIconFromText("grocery" , grocerySvg, "material" );
registerIconFromText("restaurant" , restaurantSvg, "material" );
}, []);
return (
<div className ="sample" >
<IgrSelect >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="hotel" collection ="material" > </IgrIcon >
</span >
<span > Hotel</span >
</IgrSelectItem >
<IgrSelectItem disabled >
<span slot ="prefix" >
<IgrIcon name ="grocery" collection ="material" > </IgrIcon >
</span >
<span > Grocery</span >
</IgrSelectItem >
<IgrSelectItem selected >
<span slot ="prefix" >
<IgrIcon name ="restaurant" collection ="material" > </IgrIcon >
</span >
<span > Restaurant</span >
</IgrSelectItem >
</IgrSelect >
</div >
);
}
const root = ReactDOM.createRoot (document.getElementById("root" ));
root.render (<SelectItem /> );
tsx コピー
span [slot="prefix" ] {
height : 20px ;
}
css コピー
를 IgrSelectHeader
사용하여 항목 그룹에 대한 헤더를 제공할 수 있습니다.
import React from "react" ;
import ReactDOM from "react-dom/client" ;
import {
IgrSelectModule,
IgrSelectHeaderModule,
IgrSelectItemModule,
IgrSelect,
IgrSelectItem,
IgrSelectHeader
} from "@infragistics/igniteui-react" ;
import "igniteui-webcomponents/themes/light/bootstrap.css" ;
IgrSelectModule.register();
IgrSelectHeaderModule.register();
IgrSelectItemModule.register();
export default function SelectHeader() {
return (
<div className ="sample" >
<IgrSelect >
<IgrSelectHeader > <span > Tasks</span > </IgrSelectHeader >
<IgrSelectItem value ="spec" selected > <span > Specification</span > </IgrSelectItem >
<IgrSelectItem value ="implement" > <span > Implementation</span > </IgrSelectItem >
<IgrSelectItem value ="test" disabled > <span > Testing</span > </IgrSelectItem >
<IgrSelectItem value ="docs" > <span > Documentation</span > </IgrSelectItem >
</IgrSelect >
</div >
);
}
const root = ReactDOM.createRoot (document.getElementById("root" ));
root.render (<SelectHeader /> );
tsx コピー
<IgrSelect >
<IgrSelectHeader >
<span > Tasks</span >
</IgrSelectHeader >
</IgrSelect >
tsx
그룹
구성 요소의 여는 대괄호와 닫는 대괄호 사이에 여러 IgrSelectItem
개의 s를 IgrSelectGroup
배치하여 사용자가 시각적으로 그룹화할 수 있습니다. 슬롯을 IgrSelectGroup
label
통해 레이블을 지정할 수 있으며 속성을 통해 비활성화할 수 있습니다 disabled
.
선택 그룹이 비활성화된 경우에는 해당 그룹의 개별 항목을 활성화할 수 없습니다.
import React , { useEffect } from "react" ;
import ReactDOM from "react-dom/client" ;
import {
IgrSelectModule,
IgrSelectItemModule,
IgrIconModule,
IgrSelect,
IgrSelectItem,
IgrIcon,
IgrSelectGroupModule,
IgrSelectGroup,
registerIconFromText,
} from "@infragistics/igniteui-react" ;
import "./index.css" ;
import "igniteui-webcomponents/themes/light/bootstrap.css" ;
IgrSelectModule.register();
IgrSelectGroupModule.register();
IgrSelectItemModule.register();
IgrIconModule.register();
const placeSvg =
'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 12c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm6-1.8C18 6.57 15.35 4 12 4s-6 2.57-6 6.2c0 2.34 1.95 5.44 6 9.14 4.05-3.7 6-6.8 6-9.14zM12 2c4.2 0 8 3.22 8 8.2 0 3.32-2.67 7.25-8 11.8-5.33-4.55-8-8.48-8-11.8C4 5.22 7.8 2 12 2z"/></svg>' ;
export default function SelectGroup() {
useEffect(() => {
registerIconFromText("place" , placeSvg, "material" );
}, []);
return (
<div className ="sample" >
<IgrSelect >
<IgrSelectGroup >
<span slot ="label" > Europe</span >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > Germany </span >
<span slot ="suffix" > DE</span >
</IgrSelectItem >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > France </span >
<span slot ="suffix" > FR</span >
</IgrSelectItem >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > Spain </span >
<span slot ="suffix" > ES</span >
</IgrSelectItem >
</IgrSelectGroup >
<IgrSelectGroup disabled >
<span slot ="label" > Asia</span >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > China </span >
<span slot ="suffix" > CN</span >
</IgrSelectItem >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > Japan </span >
<span slot ="suffix" > JP</span >
</IgrSelectItem >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > India </span >
<span slot ="suffix" > IN</span >
</IgrSelectItem >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > Thailand </span >
<span slot ="suffix" > TH</span >
</IgrSelectItem >
</IgrSelectGroup >
<IgrSelectGroup >
<span slot ="label" > North America</span >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > USA </span >
<span slot ="suffix" > US</span >
</IgrSelectItem >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > Canada </span >
<span slot ="suffix" > CA</span >
</IgrSelectItem >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > Mexico </span >
<span slot ="suffix" > MX</span >
</IgrSelectItem >
</IgrSelectGroup >
</IgrSelect >
</div >
);
}
const root = ReactDOM.createRoot (document.getElementById("root" ));
root.render (<SelectGroup /> );
tsx コピー
span [slot="prefix" ] {
height : 20px ;
}
css コピー
<IgrSelect >
<IgrSelectGroup >
<span slot ="label" > Europe</span >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" ref ={iconPlace} collection ="material" > </IgrIcon >
</span >
<span > Germany </span >
<span slot ="suffix" > DE</span >
</IgrSelectItem >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" ref ={iconPlace} collection ="material" > </IgrIcon >
</span >
<span > France </span >
<span slot ="suffix" > FR</span >
</IgrSelectItem >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" ref ={iconPlace} collection ="material" > </IgrIcon >
</span >
<span > Spain </span >
<span slot ="suffix" > ES</span >
</IgrSelectItem >
</IgrSelectGroup >
</IgrSelect >
tsx
확인
또한 IgrSelect
, disabled
, autofocus
와 같은 required
대부분의 IgrInput
속성을 지원합니다. 또한 구성 요소는 유효성 검사에 바인딩된 메서드를 노출합니다.
reportValidity
- 유효성을 확인하고 유효하지 않은 경우 구성요소에 초점을 맞춥니다.
키보드 탐색
선택 항목에 초점이 맞춰져 있고 옵션 목록이 표시되지 않는 경우:
열기 select
사용하여 대체 + ↑ ↓ 조합하거나 공간 아니면 그 입력하다 열쇠.
닫기 select
사용 Alt 키 + ↑ 또는 ↓ 조합 또는 다음 중 하나 들어가다 , 우주 , Esc 키 또는 IgrTab
키.
← → 키를 사용하면 목록의 이전 항목이 선택됩니다.
↑ ↓ 키를 사용하면 목록의 다음 항목을 선택할 수 있습니다.
Home 또는 End 키를 사용하면 목록의 첫 번째 또는 마지막 항목이 선택됩니다.
문자를 입력하면 항목 목록을 쿼리하고 현재 사용자 입력과 가장 일치하는 항목을 선택합니다.
선택 항목에 초점이 맞춰지고 옵션 목록이 표시되면 다음과 같습니다.
Enter 또는 Space 키를 사용하면 항목을 선택하고 목록을 닫을 수 있습니다.
← → 키를 사용하면 목록의 이전 항목이 활성화됩니다.
↑ ↓ 키를 사용하면 목록의 다음 항목이 활성화됩니다.
Home 또는 End 키를 사용하면 목록의 첫 번째 또는 마지막 항목이 활성화됩니다.
IgrSelect 구성 요소는 단일 항목 선택만 지원합니다.
스타일링
Ignite UI for React의 모양을 변경할 수 있습니다 IgrSelect
구성 요소와 해당 항목, 아래 나열된 노출된 CSS 부분을 사용합니다.
구성요소 선택
부품명
설명
input
캡슐화된 IGC 입력.
label
캡슐화된 텍스트 레이블입니다.
list
옵션 목록을 보유하는 래퍼입니다.
prefix
입력 전에 콘텐츠를 렌더링하는 접두사 래퍼입니다.
suffix
입력 후 콘텐츠를 렌더링하는 접미사 래퍼입니다.
toggle-icon
접미사 래퍼 내부의 콘텐츠를 렌더링하는 토글 아이콘 래퍼입니다.
helper-text
입력 아래에 콘텐츠를 렌더링하는 도우미 텍스트 래퍼입니다.
품목 구성요소 선택
부품명
설명
content
항목의 텍스트 콘텐츠를 보유하는 기본 래퍼입니다.
prefix
기본 래퍼 앞에 콘텐츠를 렌더링하는 접두사 래퍼입니다.
suffix
기본 래퍼 뒤에 콘텐츠를 렌더링하는 접미사 래퍼입니다.
그룹 구성요소 선택
부품명
설명
label
선택한 그룹 항목 위에 콘텐츠를 렌더링하는 라벨 래퍼입니다.
igc-select::part (base) {
background : var (--ig-primary-50 );
}
igc-select-item[active] {
background : var (--ig-secondary-300 );
}
igc-select::part (input ) {
background-color : var (--ig-primary-50 );
}
igc-select::part (prefix),
igc-select::part (suffix) {
color : var (--ig-secondary-500 -contrast);
background : var (--ig-secondary-500 );
}
css
import React , { useEffect } from "react" ;
import ReactDOM from "react-dom/client" ;
import {
IgrSelectModule,
IgrSelectItemModule,
IgrIconModule,
IgrSelect,
IgrSelectItem,
IgrIcon,
IgrSelectGroupModule,
IgrSelectGroup,
registerIconFromText,
} from "@infragistics/igniteui-react" ;
import "./index.css" ;
import "igniteui-webcomponents/themes/light/bootstrap.css" ;
IgrSelectModule.register();
IgrSelectGroupModule.register();
IgrSelectItemModule.register();
IgrIconModule.register();
const placeSvg =
'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 12c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm6-1.8C18 6.57 15.35 4 12 4s-6 2.57-6 6.2c0 2.34 1.95 5.44 6 9.14 4.05-3.7 6-6.8 6-9.14zM12 2c4.2 0 8 3.22 8 8.2 0 3.32-2.67 7.25-8 11.8-5.33-4.55-8-8.48-8-11.8C4 5.22 7.8 2 12 2z"/></svg>' ;
export default function SelectGroup() {
useEffect(() => {
registerIconFromText("place" , placeSvg, "material" );
}, []);
return (
<div className ="sample" >
<IgrSelect label ="Destinations:" >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span slot ="helper-text" > Choose the desired place</span >
<IgrSelectGroup disabled >
<span slot ="label" > Europe</span >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > Germany </span >
<span slot ="suffix" > DE</span >
</IgrSelectItem >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > France </span >
<span slot ="suffix" > FR</span >
</IgrSelectItem >
<IgrSelectItem selected >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > Spain </span >
<span slot ="suffix" > ES</span >
</IgrSelectItem >
</IgrSelectGroup >
<IgrSelectGroup >
<span slot ="label" > North America</span >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > USA </span >
<span slot ="suffix" > US</span >
</IgrSelectItem >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > Canada </span >
<span slot ="suffix" > CA</span >
</IgrSelectItem >
<IgrSelectItem >
<span slot ="prefix" >
<IgrIcon name ="place" collection ="material" > </IgrIcon >
</span >
<span > Mexico </span >
<span slot ="suffix" > MX</span >
</IgrSelectItem >
</IgrSelectGroup >
</IgrSelect >
</div >
);
}
const root = ReactDOM.createRoot (document.getElementById("root" ));
root.render (<SelectGroup /> );
tsx コピー
span [slot="prefix" ] {
height : 20px ;
}
igc-select::part (base) {
background : rgb (225 , 241 , 246 );
}
igc-select-item::part (prefix),
igc-select-item::part (suffix) {
color : rgb (1 , 42 , 74 );
}
igc-select-item[active] {
background : rgb (42 , 111 , 151 );
}
igc-select::part (label ) {
color : rgb (1 , 42 , 74 );
}
igc-select::part (input ){
background-color : rgb (225 , 241 , 246 );
}
igc-select::part (prefix),
igc-select::part (suffix){
color : white;
background : rgb (42 , 111 , 151 );
}
css コピー
API 참조
추가 리소스