syncfusion-react-listview — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited syncfusion-react-listview (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A comprehensive guide to implementing the Syncfusion React ListView component for displaying dynamic, interactive lists with advanced features like templating, filtering, selection, and data management.
Use this skill when you need to:
The ListView component displays a collection of items in a scrollable, interactive list. It supports:
npm install @syncfusion/ej2-react-lists @syncfusion/ej2-base @syncfusion/ej2-dataimport { ListViewComponent } from '@syncfusion/ej2-react-lists';
// For additional features:
import { Inject, Virtualization } from '@syncfusion/ej2-react-lists';import '@syncfusion/ej2-react-lists/styles/material.css'; // or other themesimport React from 'react';
import { ListViewComponent } from '@syncfusion/ej2-react-lists';
export function BasicListView() {
const data = [
{ id: '1', text: 'Item 1' },
{ id: '2', text: 'Item 2' },
{ id: '3', text: 'Item 3' }
];
return (
<ListViewComponent
id="list"
dataSource={data}
fields={{ text: 'text', id: 'id' }}
/>
);
}Local Array:
const items = ['Apple', 'Banana', 'Orange'];
<ListViewComponent dataSource={items} />Object Array with Mapping:
const data = [
{ productId: 1, productName: 'Laptop', category: 'Electronics' },
{ productId: 2, productName: 'Desk', category: 'Furniture' }
];
<ListViewComponent
dataSource={data}
fields={{
id: 'productId',
text: 'productName',
groupBy: 'category'
}}
/>const handleSelect = (args) => {
console.log('Selected item:', args.text, args.id);
};
<ListViewComponent
dataSource={data}
select={handleSelect}
/>addItem(data, fields?)removeItem(item)getSelectedItems()// Item Template
const itemTemplate = (props) => (
<div className="e-list-wrapper">
<span>{props.text}</span>
<span className="e-list-content">{props.category}</span>
</div>
);
<ListViewComponent
dataSource={data}
fields={fields}
template={itemTemplate}
/>📄 Read: references/getting-started.md
📄 Read: references/data-binding-rendering.md
📄 Read: references/item-management.md
📄 Read: references/selection-filtering.md
📄 Read: references/templating-customization.md
headerTemplategroupTemplate📄 Read: references/advanced-features.md
📄 Read: references/layout-alignment-patterns.md
📄 Read: references/performance-virtualization.md
📄 Read: references/api-reference.md
📄 Read: references/accessibility-events.md
User clicks item → select event fires → update UI
const [selected, setSelected] = React.useState(null);
const handleSelect = (args) => {
setSelected(args);
};
<ListViewComponent
dataSource={items}
select={handleSelect}
/>const listViewRef = React.useRef(null);
const addItem = () => {
listViewRef.current.addItem([{ text: 'New Item', id: Date.now() }]);
};
const removeItem = (item) => {
listViewRef.current.removeItem(item);
};
<ListViewComponent ref={listViewRef} dataSource={items} />const [filteredData, setFilteredData] = React.useState(items);
const handleFilter = (searchText) => {
const filtered = items.filter(item =>
item.text.toLowerCase().includes(searchText.toLowerCase())
);
setFilteredData(filtered);
};
<ListViewComponent dataSource={filteredData} /><ListViewComponent
dataSource={items}
showCheckBox={true}
fields={{ id: 'id', text: 'text', isChecked: 'checked' }}
/><div style={{
border: '1px solid #e0e0e0',
borderRadius: '4px',
overflow: 'hidden',
display: 'flex',
flexDirection: 'column'
}}>
<div style={{
padding: '16px',
backgroundColor: '#f5f5f5',
borderBottom: '1px solid #e0e0e0'
}}>
<h3 style={{ margin: 0 }}>Messages</h3>
</div>
<div style={{ flex: 1, overflow: 'auto', minHeight: 0 }}>
<ListViewComponent
dataSource={items}
height="100%"
width="100%"
/>
</div>
</div><div style={{
display: 'grid',
gridTemplateColumns: 'repeat(3, 1fr)',
gap: '16px'
}}>
{/* Card 1 - ListView */}
<div style={{ border: '1px solid #e0e0e0', display: 'flex', flexDirection: 'column' }}>
<div style={{ padding: '12px', backgroundColor: '#f5f5f5' }}>Appointments</div>
<div style={{ flex: 1, overflow: 'auto', minHeight: 0 }}>
<ListViewComponent dataSource={appointments} height="300px" />
</div>
</div>
{/* Card 2, Card 3, etc. */}
</div>See Layout & Alignment Patterns Guide for:
| Property | Type | Default | Purpose | ||
|---|---|---|---|---|---|
dataSource | Array/DataManager | [] | Data to display | ||
fields | FieldSettingsModel | defaultMappedFields | Map data to fields | ||
template | string/function/JSX | null | Custom item template | ||
headerTemplate | string/function/JSX | null | Custom header template | ||
groupTemplate | string/function/JSX | null | Custom group template | ||
showCheckBox | boolean | false | Show checkboxes | ||
checkBoxPosition | 'Left'\ | 'Right' | 'Left' | Checkbox position | |
sortOrder | 'None'\ | 'Ascending'\ | 'Descending' | 'None' | Data sort order |
enableVirtualization | boolean | false | Virtual scrolling | ||
height | number\ | string | '' | List height | |
width | number\ | string | '' | List width | |
cssClass | string | '' | Custom CSS class | ||
enabled | boolean | true | Enable/disable component | ||
enableRtl | boolean | false | Right-to-left support | ||
animation | AnimationSettings | {...} | Item animations |
| Method | Purpose |
|---|---|
addItem(data, fields?) | Add new items to list |
removeItem(item) | Remove item from list |
removeMultipleItems(items) | Remove multiple items at once |
selectItem(item) | Select an item |
selectMultipleItems(items) | Select multiple items |
unselectItem(item?) | Deselect item(s) |
getSelectedItems() | Get current selection |
findItem(item) | Find item details |
checkItem(item) | Check a checkbox item |
uncheckItem(item) | Uncheck checkbox item |
checkAllItems() | Check all items |
uncheckAllItems() | Uncheck all items |
enableItem(item) | Enable disabled item |
disableItem(item) | Disable item |
hideItem(item) | Hide item |
showItem(item) | Show hidden item |
back() | Navigate back from nested list |
refreshItemHeight() | Refresh item heights (virtualization) |
destroy() | Clean up component |
| Event | Triggers When |
|---|---|
select | Item is selected |
actionBegin | Any action starts |
actionComplete | Any action completes |
actionFailure | Remote data fetch fails |
scroll | User scrolls to top/bottom |
fields correctly for data to displayDataManager for filtering/sorting large remote datacssClass for lightweight customizationselect event for user interactionsdestroy() when component unmountsfields mappingheight on parent container when using flex layoutoverflow: 'auto' and minHeight: 0 on flex children for scrollingflexShrink: 0 on headers to prevent shrinkinggap in templates instead of individual margins for consistent spacingwidth: '100%' and height: '100%' on ListView to fill containerdisplay: 'flex' and flexDirection: 'column'gridColumn/gridRowoverflow: 'hidden' on card container to respect border-radiusminHeight: 0 on scrolling containers in flexItems not displaying?
dataSource is populatedfields mapping matches data structuretext field is mapped correctlySelection not working?
select event handler is boundid fieldPerformance issues?
enableVirtualization={true}DataManager for remote filtering instead of client-sideStyling issues?
cssClass is applied to root elementNext Steps:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.