Also, was wir wollen, ist so etwas wie:Wie können mehrere Arten von Zeilen in einer reaktiven nativen Listenansicht angezeigt werden?
In iOS wir mehrere cellIdentifier für jeden Zelltyp erstellen performant Listenansicht verwenden könnte.
Was ich jetzt habe, ist so etwas wie
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} />
);
)
und auf der renderRow Methode
_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;
};
Das Problem mit dem obigen Code ist, dass es die dataSource.rowHasChanged Methode ist wirklich machen zu kompliziert richtig implementieren.
und aus irgendeinem Grund, wenn ich eine Zeile entfernt, in RN0.31 Sie einige ui-Defekte als solche haben:
Falls jemand fragen, am Ende sind wir nur mit Scrollview, da die maximale Anzahl von Reihe recht begrenzt ist (<20) –