Loading...
Loading...
Implement Syncfusion React ComboBox component for dropdown inputs with search and filtering capabilities. Use this when working with searchable dropdowns, data binding, templates, grouping, or virtual scrolling. This skill covers installation, data sources (local/remote), filtering, grouping, templates, advanced features like virtual scrolling and localization, and styling options.
npx skill4agent add syncfusion/react-ui-components-skills syncfusion-react-comboboxnpm install @syncfusion/ej2-react-dropdownsChangeEventArgsFilteringEventArgsFieldSettingsModelPopupEventArgsnpm install @syncfusion/ej2-react-dropdownsimport { ComboBoxComponent } from '@syncfusion/ej2-react-dropdowns';
import '@syncfusion/ej2-base/styles/tailwind3.css';
import '@syncfusion/ej2-react-dropdowns/styles/tailwind3.css';
export default function App() {
const sportsList = ['Badminton', 'Cricket', 'Football', 'Golf', 'Tennis'];
return (
<ComboBoxComponent
id="combobox"
dataSource={sportsList}
placeholder="Select a sport"
allowCustom={true}
/>
);
}export default function App() {
const sportsData = [
{ Id: 'game1', Game: 'Badminton', Players: 2 },
{ Id: 'game2', Game: 'Football', Players: 11 },
{ Id: 'game3', Game: 'Cricket', Players: 11 }
];
const fields = { text: 'Game', value: 'Id' };
return (
<ComboBoxComponent
id="combobox"
dataSource={sportsData}
fields={fields}
placeholder="Select a game"
change={(e) => console.log('Selected:', e.value)}
/>
);
}enableVirtualizationVirtualScrollimport { ComboBoxComponent, Inject, VirtualScroll } from '@syncfusion/ej2-react-dropdowns';
const [filterValue, setFilterValue] = useState('');
<ComboBoxComponent
dataSource={largeDataset}
fields={{ text: 'name', value: 'id' }}
filtering={(e) => filterByName(e, 'name')}
change={(e) => setFilterValue(e.value)}
allowFiltering={true}
enableVirtualization={true}
popupHeight="200px"
>
<Inject services={[VirtualScroll]} />
</ComboBoxComponent>const categorizedData = [
{ Category: 'Sports', Item: 'Cricket', value: 1 },
{ Category: 'Sports', Item: 'Football', value: 2 },
{ Category: 'Games', Item: 'Chess', value: 3 },
{ Category: 'Games', Item: 'Carrom', value: 4 }
];
const fields = {
text: 'Item',
value: 'value',
groupBy: 'Category'
};
<ComboBoxComponent dataSource={categorizedData} fields={fields} />import { DataManager, WebApiAdaptor } from '@syncfusion/ej2-data';
const dataManager = new DataManager({
url: 'https://api.example.com/sports',
adaptor: new WebApiAdaptor()
});
<ComboBoxComponent
dataSource={dataManager}
fields={{ text: 'name', value: 'id' }}
allowFiltering={true}
/>const itemTemplate = (props) => {
return (
<div className="flex items-center gap-2">
<span className={`icon icon-${props.value}`}></span>
<span>{props.name}</span>
<small className="text-gray-500">({props.players} players)</small>
</div>
);
};
<ComboBoxComponent
dataSource={sportsData}
itemTemplate={itemTemplate}
fields={{ text: 'name', value: 'id' }}
/>| Prop | Type | Description | Common Use |
|---|---|---|---|
| Array|DataManager | Data items to display | All use cases |
| FieldSettingsModel | Map data fields (text, value, groupBy, iconCss, disabled) | Complex data |
| string | Hint text when empty | UX guidance |
| boolean | Allow user to enter custom values not in the list. Default: | Open-ended input |
| boolean | Enable filter bar (search box) in the popup. Default: | Search capability |
| boolean | Enable virtual scrolling for large datasets. Requires | Large datasets (5,000+ items) |
| SortOrder | | Sorted lists |
| string|number | Dropdown height (e.g., | Layout control |
| string|number | Dropdown width (e.g., | Layout control |
| boolean | Enable/disable component. Default: | Conditional rendering |
| boolean | Prevent user input. Default: | View-only mode |
| boolean | Show clear (×) button. Default: | Allow clearing selection |
| EmitType<ChangeEventArgs> | Fires when selection changes | Event handling |
| EmitType<FilteringEventArgs> | Fires when user types; use for custom filter logic | Advanced search |
| Function|string | Custom item HTML for each list item | Rich UI |