React Native中的ListView网格

我在React Native中构建一个简单的应用程序,从远程JSON源获取列表,并在屏幕上显示它们。

到目前为止,使用优秀的example这里,我设法得到结果显示使用ListView组件在行(即每行1个结果,见屏幕截图)。我需要结果以网格显示,即每行3到6个项目,这取决于屏幕大小和方向。

将这些结果转换为网格的最好方法是什么?我可以使用ListView为此,还是只有一行一行结果?我试着玩flexBox样式,但是,因为React似乎不接受%值和ListView不接受样式,我还没有取得任何成功。

你需要使用 flexbox的组合,知道ListView包装ScrollView等,所以它的属性。考虑到这一点,你可以使用ScrollView的contentContainerStyle prop来设置项目的样式。
var TestCmp = React.createClass({
    getinitialState: function() {
      var ds = new ListView.DataSource({rowHasChanged: (r1,r2) => r1 !== r2});
      var data = Array.apply(null,{length: 20}).map(Number.call,Number);
      return {
        dataSource: ds.cloneWithRows(data),};
    },render: function() {
      return (
        <ListView contentContainerStyle={styles.list}
          dataSource={this.state.dataSource}
          renderRow={(rowData) => <Text style={styles.item}>{rowData}</Text>}
        />
      );
    }
});

只是一个ListView与一些虚拟数据。注意使用contentContainerStyle。这里是style对象:

var styles = StyleSheet.create({
    list: {
        flexDirection: 'row',flexWrap: 'wrap'
    },item: {
        backgroundColor: 'red',margin: 3,width: 100
    }
});

我们告诉容器我们想要一个包装行中的项目,并且我们设置每个子对象的宽度。

相关文章

react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接...
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc ...