diff --git a/src/SelectMultiple.js b/src/SelectMultiple.js index 027ed0f..5d11085 100644 --- a/src/SelectMultiple.js +++ b/src/SelectMultiple.js @@ -55,30 +55,23 @@ export default class SelectMultiple extends Component { renderLabel: null } - constructor (props) { - super(props) - this.state = { dataSource: [] } - } - - componentDidMount () { - const rows = this.getRowData(this.props) - this.setState({ dataSource: rows }) - } - - componentWillReceiveProps (nextProps) { - const rows = this.getRowData(nextProps) - this.setState({ dataSource: rows }) - } - - getRowData ({ items, selectedItems }) { - items = items.map(this.toLabelValueObject) - selectedItems = (selectedItems || []).map(this.toLabelValueObject) - - items.forEach((item) => { - item.selected = selectedItems.some((i) => i.value === item.value) - }) + items = undefined + selectedItems = undefined + rowData = [] + + getRowData (items, selectedItems) { + if (items !== this.items || selectedItems !== this.selectedItems) { + this.items = items + this.selectedItems = selectedItems + this.rowData = items.map(this.toLabelValueObject) + selectedItems = (selectedItems || []).map(this.toLabelValueObject) + + this.rowData.forEach((item) => { + item.selected = selectedItems.some((i) => i.value === item.value) + }) + } - return items + return this.rowData } onRowPress (row) { @@ -113,8 +106,8 @@ export default class SelectMultiple extends Component { keyExtractor = (item, index) => index.toString() render () { - const { dataSource } = this.state - const { style, flatListProps, keyExtractor } = this.props + const { style, flatListProps, keyExtractor, items, selectedItems } = this.props + const dataSource = this.getRowData(items, selectedItems) return (