无涯教程-React Native - ListView

93 阅读2分钟

React Native ListView是一个视图组件,其中包含项目列表并显示在垂直可滚动列表中。创建列表视图的最小API是ListView.DataSource。它填充一个简单的数据blob数组,并使用数据源和renderRow回调实例化ListView组件。 renderRow从数据数组中获取一个Blob并返回可渲染组件。

Note: ListView组件已弃用。要实现列表组件,请使用新的列表组件FlatList或SectionList。

ListView示例1

让我们创建一个ListView组件的示例。在此示例中,我们创建一个数据源,并用数组填充它。使用该数组作为其数据源创建一个ListView组件,并将其传递到其renderRow回调中。 renderRow是一个函数,该函数返回渲染行的组件。

import React, { Component } from react
import { Text, ListView, StyleSheet } from react-native

export default class MyListComponent extends Component { constructor() { super(); const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); this.state = { dataSource: ds.cloneWithRows([Android,iOS, Java,Php, Hadoop, Sap, Python,Ajax, C++, Ruby, Rails,.Net, Perl]), }; }

render</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="pun">(</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="typ">ListView</span><span class="pln">
            dataSource</span><span class="pun">={</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">state</span><span class="pun">.</span><span class="pln">dataSource</span><span class="pun">}</span><span class="pln">
            renderRow</span><span class="pun">={</span><span class="pln">
                </span><span class="pun">(</span><span class="pln">rowData</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln">
                    </span><span class="pun">&lt;</span><span class="typ">Text</span><span class="pln"> style</span><span class="pun">={{</span><span class="pln">fontSize</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20</span><span class="pun">}}&gt;{</span><span class="pln">rowData</span><span class="pun">}&lt;/</span><span class="typ">Text</span><span class="pun">&gt;}</span><span class="pln">
        </span><span class="pun">/&gt;</span><span class="pln">
    </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

}

输出:

React Native ListView

在上面的代码中,我们在构造函数中创建ListViewDataSource的实例。 ListViewDataSource是一个参数,并接受包含以下四个参数之一的参数:

  • getRowData(dataBlob, sectionID, rowID)
  • getSectionHeaderData(dataBlob, sectionID)
  • rowHasChanged(previousRowData, nextRowData)
  • sectionHeaderHasChanged(previousSectionData, nextSectionData)

ListView示例2

添加了分隔以提供单独的块并更好地显示列表项。props renderSeparator用于在ListView的items之间添加分隔符。

在Text上实现onPress props属性,以在单击列表项时执行操作。

import React from react;
import { View, ListView, StyleSheet, Text,Alert} from react-native;

class ListViewDemo extends React.Component { constructor(props) { super(props);

    </span><span class="kwd">const</span><span class="pln"> ds </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ListView</span><span class="pun">.</span><span class="typ">DataSource</span><span class="pun">({</span><span class="pln">rowHasChanged</span><span class="pun">:</span><span class="pln"> </span><span class="pun">(</span><span class="pln">r1</span><span class="pun">,</span><span class="pln"> r2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> r1 </span><span class="pun">!==</span><span class="pln"> r2</span><span class="pun">});</span><span class="pln">
    </span><span class="kwd">this</span><span class="pun">.</span><span class="pln">state </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        dataSource</span><span class="pun">:</span><span class="pln"> ds</span><span class="pun">.</span><span class="pln">cloneWithRows</span><span class="pun">([</span><span class="pln"> </span><span class="str">"Android"</span><span class="pun">,</span><span class="pln">
            </span><span class="str">"iOS"</span><span class="pun">,</span><span class="str">"Java"</span><span class="pun">,</span><span class="str">"Swift"</span><span class="pun">,</span><span class="pln">
            </span><span class="str">"Php"</span><span class="pun">,</span><span class="str">"Hadoop"</span><span class="pun">,</span><span class="str">"Sap"</span><span class="pun">,</span><span class="pln">
            </span><span class="str">"Python"</span><span class="pun">,</span><span class="str">"Ajax"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"C++"</span><span class="pun">,</span><span class="pln">
            </span><span class="str">"Ruby"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Rails"</span><span class="pun">,</span><span class="str">".Net"</span><span class="pun">,</span><span class="pln">
            </span><span class="str">"Perl"</span><span class="pun">,</span><span class="pln">
        </span><span class="pun">])</span><span class="pln">
    </span><span class="pun">};</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="com">//handling onPress action</span><span class="pln">
getListViewItem </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">rowData</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="typ">Alert</span><span class="pun">.</span><span class="pln">alert</span><span class="pun">(</span><span class="pln">rowData</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
render</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="pun">(</span><span class="pln">
            </span><span class="pun">&lt;</span><span class="typ">ListView</span><span class="pln">
                style</span><span class="pun">={</span><span class="pln">styles</span><span class="pun">.</span><span class="pln">container</span><span class="pun">}</span><span class="pln">
                dataSource</span><span class="pun">={</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">state</span><span class="pun">.</span><span class="pln">dataSource</span><span class="pun">}</span><span class="pln">
                renderRow</span><span class="pun">={(</span><span class="pln">rowData</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln">
                   </span><span class="pun">&lt;</span><span class="typ">Text</span><span class="pln"> style</span><span class="pun">={</span><span class="pln">styles</span><span class="pun">.</span><span class="pln">rowViewContainer</span><span class="pun">}</span><span class="pln">
                         onPress</span><span class="pun">={</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">getListViewItem</span><span class="pun">.</span><span class="pln">bind</span><span class="pun">(</span><span class="kwd">this</span><span class="pun">,</span><span class="pln"> rowData</span><span class="pun">)}&gt;{</span><span class="pln">rowData</span><span class="pun">}</span><span class="pln">
                   </span><span class="pun">&lt;/</span><span class="typ">Text</span><span class="pun">&gt;</span><span class="pln">
                </span><span class="pun">}</span><span class="pln">
                renderSeparator</span><span class="pun">={(</span><span class="pln">sectionId</span><span class="pun">,</span><span class="pln"> rowId</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln">
                    </span><span class="pun">&lt;</span><span class="typ">View</span><span class="pln"> key</span><span class="pun">={</span><span class="pln">rowId</span><span class="pun">}</span><span class="pln"> style</span><span class="pun">={</span><span class="pln">styles</span><span class="pun">.</span><span class="pln">separator</span><span class="pun">}</span><span class="pln"> </span><span class="pun">/&gt;}</span><span class="com">//adding separation</span><span class="pln">
            </span><span class="pun">/&gt;</span><span class="pln">
    </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

}

const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: "#e5e5e5" }, separator: { height: 0.5, width: "100%", backgroundColor: "#000" }, rowViewContainer: { flex: 1, paddingRight: 15, paddingTop: 13, paddingBottom: 13, borderBottomWidth: 0.5, borderColor: #c9c9c9, flexDirection: row, alignItems: center, fontSize: 20, marginLeft: 10, }, });

export default ListViewDemo;

输出:

React Native ListViewReact Native ListView

参考链接

www.learnfk.com/react-nativ…