So we want something like:
multi-line type
In iOS, we could use multiple cellIdentifier for each cell type to create a list of results.
Now i have something like
render() { const dataBlob = [ { type: "address", data: { address, gotoEditAddress } }, { type: "deliveryTime", data: {...} }, { type: "cartSummary", data: {...} }, ...[items.map(item => {{ type: "item", data: {...} }})], { type: "paymentInformation", data: {...} }, { type: "paymentBreakdown", data: {...} }, { type: "promoCode", data: {...} }, ]; this._dataSource = this._dataSource.cloneWithRows(dataBlob); return ( <ListView ref="ScrollView" renderRow={this._renderRow} dataSource={this._dataSource} /> ); )
and renderRow method
_renderRow = (rowData) => { const { type, data } = rowData; if (type === "address") return <AddressRow {...data} />; if (type === "deliveryTime") return <DeliveryTimeRow {...data} />; if (type === "menuItem") return <MenuItemRow {...data} />; if (type === "cartSummary") return <CartSummaryRow {...data} />; if (type === "promoCode") return <PromoCodeRow {...data} />; if (type === "paymentInformation") return <PaymentRow {...data} />; if (type === "paymentBreakdown") return <PaymentBreakdownRow {...data} />; return null; };
The problem with the above code is that it makes the dataSource.rowHasChanged method really difficult to implement correctly.
and for some reason, when I deleted the line, in RN0.31 you will have some ui defects as such:
ui-errors
source share