SectionList with sidebar to jump to sections
$ npm i react-native-sectionlist-sidebaror
$ yarn add react-native-sectionlist-sidebarimport SectionListSidebar from 'react-native-sectionlist-sidebar'class App extends React.Component {
render() {
return (
<SectionListSidebar
...
/>
)
}
}| Property | Type | Description | Required | Default |
|---|---|---|---|---|
| data | array < object > | Sections data | Yes | |
| renderItem | function | Returns section list item component | Yes | |
| itemHeight | number | Section's list item height | Yes | |
| sectionHeaderHeight | number | Section's header height | No | 22 |
| sectionFooterHeight | number | Section's footer height | No | 0 |
| separatorHeight | number | Section's list item serparator height | No | 0 |
| listHeaderHeight | number | SectionList top header height | No | 0 |
| sectionHeaderTextStyle | object | Section's list item text style | No | { height: 22 } |
| renderSidebarItem | function | Returns sidebar's item component | No | |
| sidebarContainerStyle | object | Sidebar's container style | No | { width: 30 } |
| sidebarItemContainerStyle | object | Sidebar's item container style | No | |
| sidebarItemTextStyle | object | Sidebar's item text style | No | |
| containerStyle | object | SectionListSidebar component's style | No | |
| rtl | boolean | Reverse layout if set to true | No | false |
And all the optional props of <SectionList />. You can find them here.
import React from 'react'
import { Text } from 'react-native'
import SectionListSidebar from 'react-native-sectionlist-sidebar'
export default class MinimalExampleScreen extends React.Component {
render() {
return (
<SectionListSidebar
data={[{ key: 'A', title: 'A', data: ['Aaron', 'Ali'] }]}
renderItem={({ item }) => <Text key={item.key}>{item}</Text>}
itemHeight={30}
/>
)
}
}key: section's sidebar item title,stringtitle: section's title,stringdata: section's data,[{}]orstring
renderSectionHeader = ({ section }) => (
<View style={{ height: 30, backgroundColor: 'lightgray' }}>
<Image />
<Text>{section.title}</Text>
</View>
);
...
<SectionListSidebar
renderSectionHeader={this.renderSectionHeader}
sectionHeaderHeight={30}
...
/>Use
renderSectionHeaderonly if you need to add components to the section headers. For simple headers usesectionHeaderTextStyle.
sectionHeaderHeightmust be equal to section header's height with top and bottom margins, paddings, and borders.
renderSidebarItem = ({ item, index }) => (
<TouchableOpacity
onPress={() => { this.sectionListSidebar.jumpToSection(index); }}
style={{ marginVertical: 4, backgroundColor: 'lightgray' }}>
<Text style={{ padding: 10, color: 'black', textAlign: 'center' }}>{item}</Text>
</TouchableOpacity>
);
...
<SectionListSidebar
ref={ref => { this.sectionListSidebar = ref; }}
renderSidebarItem={this.renderSidebarItem}
...
/>Use
renderSidebarItemonly if you need to fire a function before/after humping to section and/or add components to sidebar items. You may try accomplishing what you want usingsidebarItemContainerStyleandsidebarItemTextStyleprops first, and if you failed, userenderSidebarItem.
- Names example with array of strings. array-of-strings-example.js
- Months example with array of objects. array-of-objects-example.js
- Custom sidebar component
- Add RTL support
- Add more examples
- Mark selected sidebar item
- Add Tests
- Your suggestion!



