React Native不重新渲染Listview

时间:2017-12-16 00:41:21

标签: android react-native react-redux

所以我是React Native的新用户,我正在使用reduxreact-navigation构建此应用。这是问题所在:

我从API获取记录,事情进展顺利。当我获取记录时,有Loading图标,然后Listview显示记录,然后当没有记录时,我显示No record found. Text。然后突然记录停止显示,Loading图标会在有记录时继续显示,但是当没有记录时Text显示。

可能导致此错误的原因是什么?我正在使用Expo所以我打印以控制提取的记录并且有记录。在获取数据之后,我在console.log函数中放了render并调用它,这意味着它只是不呈现Listview

提前致谢!

更新

所以我使用了FlatList,如下所示,我发现从item传递的FlatList未定义,当我打印传递的数据时,这又是一个奇怪的原因列表中有内容。这是我目前的代码:

MyFlatlist

return <FlatList
  data={data} //an array of objects
  renderItem={this._renderItem} //console prints undefined
/>

//I also tried
return <FlatList
  data={data} //an array of objects
  renderItem={({item}) => this._renderItem(item)} //I think this doesn't call the method cause it doesn't print anything on the console.
/>

MyRenderItem

_renderItem = ({item}) => {
  console.log(item)
}

最终更新

因此有两个因素导致了这个问题,首先是我将数据更改的API导致我在我的视图中访问的字段不再存在,React Native将此视为错误和结果渲染停止而没有错误消息,这就是难以检测的原因。其次,当我使用FlatList时,发送到renderItem函数的每个项目也位于一个对象中,该对象具有包含实际数据的属性item,因此渲染会再次停止。

就我的设置而言,现在已修复。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我之前发现ListView没有重新渲染。

来自docs

  

提供给数据源的rowHasChanged函数告诉ListView是否需要重新呈现行,因为源数据已更改 - 有关更多详细信息,请参阅ListViewDataSource

但ListView已被弃用。见https://facebook.github.io/react-native/docs/listview.html。尝试使用FlatListSectionList。有关详情,请参阅此article