1.0.0 • Published 4 years ago
d-react-native-awesome-list v1.0.0
React Native Custom List (Using FLatList, SectionList)
Help to implement FlatList, SectionList from React Native faster, iOS + Android
Setup
npm install --save https://github.com/boythan/react-native-awesome-list.git
# --- or ---
yarn add https://github.com/boythan/react-native-awesome-list.gitUsing
FlatList with raw data
import AwesomeListComponent from "react-native-awesome-list";
//...
export default const RawDataAwesomeList = () => {
const listRef = useRef(null)
//...
const source = () => {
return Promise.resolve(YOUR_RAW_DATA_LIST)
}
//When you want to reload data in list
//after this function called, awesomeList will run source then transformer again to fetch new data for list
const refreshData = () => {
listRef.refresh()
}
//render row item in list
const renderItem = ({item, index}) => <Text>{item.name}</Text>
return <AwesomeListComponent
source={source}
renderItem={(renderItem}
ref={listRef}
/>
//...
}FlatList with Promise, API call
import AwesomeListComponent from "react-native-awesome-list";
//...
export default const CustomerAwesomeList = () => {
const listRef = useRef(null)
//...
//Receive a promise that return the data will be displayed in list
const source = (paging) => {
return API.customerList(paging)
}
//Custom data from source function, ensure return an array
const transformer = (res) => {
return res?.data?.data ?? []
}
//When you want to reload data in list
//after this function called, awesomeList will run source then transformer again to fetch new data for list
const refreshData = () => {
listRef.refresh()
}
//render row item in list
const renderItem = ({item, index}) => <Text>{item.name}</Text>
return <AwesomeListComponent
isPaging
source={source}
transformer={transformer}
renderItem={renderItem}
ref={listRef}
/>
//...
}SectionList
import AwesomeListComponent from "react-native-awesome-list";
//...
export default const CustomerAwesomeList = () => {
const listRef = useRef(null)
//...
//Receive a promise that return the data will be displayed in list
const source = () => {
return API.customerList()
}
//Custom data from source function, ensure return an array
const transformer = (res) => {
return res?.data?.data ?? []
}
//Custom data from source function, ensure return an array
const createSections = (res) => {
return [{
title: "Section 1",
data: []
}]
}
//When you want to reload data in list
//after this function called, awesomeList will run source then transformer again to fetch new data for list
const refreshData = () => {
listRef.refresh()
}
//render row item in list
const renderItem = ({item, index}) => <Text>{item.name}</Text>
const renderSectionHeader = ({section}) => <Text>{section?.title}</Text>
return <AwesomeListComponent
ref={listRef}
isSectionList={true}
source={source}
renderItem={renderItem}
transformer={transformer}
renderSectionHeader={renderSectionHeader}
createSections={createSections}
/>
//...
}API
Props
| Prop | Default | Type | Description |
|---|---|---|---|
| source | () => Promise.resolve([]) | () => Promise | Source of data |
| transformer | (response) => response | () => array | Array will be displayed in list |
| renderItem | ({item, index}) => | func | render function for list item rendering |
| keyExtractor | (item) => item?.id ?? item | func | unique key for row |
| isPaging | false | boolean | list will be paging(load more) or not |
| pageSize | 20 | number | number of item will be load in each page |
| containerStyle | undefined | style | root wrapper style |
| listStyle | undefined | style | list style |
| emptyViewStyle | undefined | style | empty view style |
| renderSeparator | undefined | func | separator component |
| isSectionList | false | boolean | is section list or not |
| renderSectionHeader | undefined | func | section header component |
| createSections | undefined | func | receive section data follow format {title: string, data: array} |
| renderEmptyView | undefined | func | empty view (when data is empty) component |
| renderErrorView | undefined | func | error view (when source function is rejected) component |
| renderProgress | undefined | func | progress view (when source function is waiting promise) component |
| listHeaderComponent | undefined | func | List's header component |
| emptyText | "No result" | text | Custom empty text (when data is empty) |
| filterEmptyText | "No filter result" | text | Custom filter empty text (when filter data is empty) |
| numColumns | 1 | number | number of column in list |
Methods
| method | params | Description |
|---|---|---|
| refresh | null | Refresh data, awesomeList will re-run source then transformer |
| applyFilter | actionFilter | when you want to apply some filter for this list E.g listRef.applyFilter(item => item.isSelect) |
| removeFilter | null | when you want to remove all filter that you applied before |
Enjoy
Questions or suggestions?
Feel free to open an issue
1.0.0
4 years ago