mirror of
https://github.com/status-im/react-native.git
synced 2025-01-16 12:34:17 +00:00
6c5f532591
Summary: These pages should sufficiently give a beginner enough information to make most layouts in React Native. They should go after the basics-style page, whenever that is ready. Having a single page for Layout was too much, so I split it into two: Dimensions and Layout. ![dimensions react native a framework for building native apps using react](https://cloud.githubusercontent.com/assets/1198882/16311045/c6918b64-3923-11e6-8cc9-daeda9eb40e6.png) ![layout react native a framework for building native apps using react](https://cloud.githubusercontent.com/assets/1198882/16310233/9a66405a-3920-11e6-9ef6-1594f7228e83.png) lacker Closes https://github.com/facebook/react-native/pull/8364 Differential Revision: D3477147 Pulled By: lacker fbshipit-source-id: 1ef31ac0a64e43166a7581b38fa8263282672eeb
51 lines
2.2 KiB
Markdown
51 lines
2.2 KiB
Markdown
---
|
|
id: basics-component-listview
|
|
title: ListView
|
|
layout: docs
|
|
category: The Basics
|
|
permalink: docs/basics-component-listview.html
|
|
next: basics-dimensions
|
|
---
|
|
|
|
On mobile devices, lists are a core element in many applications. The [`ListView`](/react-native/docs/listview.html#content) component is a special type of [`View`](/react-native/docs/basics-component-view.html) that displays a *vertically* scrolling list of changing, but similarly structured, data.
|
|
|
|
`ListView` works best for possibly lengthy datasources (e.g., from an endpoint or database), where the number of items may not be known a priori.
|
|
|
|
> Unlike the more generic [`ScrollView`](/react-native/docs/basics-component-scrollview.html), the `ListView` only renders elements that are currently showing on the screen, not all the elements at once.
|
|
|
|
The `ListView` component requires two properties, `dataSource` and `renderRow`. `dataSource` is the source of information for the list. `renderRow` takes one item from the source and returns a formatted component to render.
|
|
|
|
This example creates a simple `ListView` of hardcoded data. It first initializes the `dataSource` that will be used to populate the `ListView`. Each item in the `dataSource` is then rendered as a `Text` component. Finally it renders the `ListView` and all `Text` components.
|
|
|
|
> A `rowHasChanged` function is required to use `ListView`. Here we just say a row has changed if the row we are on is not the same as the previous row.
|
|
|
|
```JavaScript
|
|
import React from 'react';
|
|
import { AppRegistry, ListView, Text, View } from 'react-native';
|
|
|
|
var AwesomeList = React.createClass({
|
|
// Initialize the hardcoded data
|
|
getInitialState: function() {
|
|
var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
|
|
return {
|
|
dataSource: ds.cloneWithRows([
|
|
'John', 'Joel', 'James', 'Jimmy', 'Jackson', 'Jillian', 'Julie'
|
|
])
|
|
};
|
|
},
|
|
render: function() {
|
|
return (
|
|
<View style={{paddingTop: 22}}>
|
|
<ListView
|
|
dataSource={this.state.dataSource}
|
|
renderRow={(rowData) => <Text>{rowData}</Text>}
|
|
/>
|
|
</View>
|
|
);
|
|
}
|
|
});
|
|
|
|
// App registration and rendering
|
|
AppRegistry.registerComponent('AwesomeProject', () => AwesomeList);
|
|
```
|