Listview 如何将行前置到react本机列表视图?
我几乎找遍了所有地方,想找到解决办法 是否有一种方法可以在不重新渲染每一行的情况下,将行预先添加到Listview 如何将行前置到react本机列表视图?,listview,reactjs,react-native,Listview,Reactjs,React Native,我几乎找遍了所有地方,想找到解决办法 是否有一种方法可以在不重新渲染每一行的情况下,将行预先添加到listview?我觉得很奇怪,facebook没有在文档中包含这样做的方法!我觉得好像有一种内存高效的方法可以做到这一点,就像您可以使用本机脚本(java、swift)那样 有很多讨论试图解决这个问题,例如: 但到目前为止,我还没有找到一种有效的方法来实现这一点。没有直接的方法在ListView前面添加行。关于ListView.DataSource的文档并不多。就这样- 如果要从ListView
listview
?我觉得很奇怪,facebook
没有在文档中包含这样做的方法!我觉得好像有一种内存高效的方法可以做到这一点,就像您可以使用本机脚本(java、swift)那样
有很多讨论试图解决这个问题,例如:
但到目前为止,我还没有找到一种有效的方法来实现这一点。没有直接的方法在ListView前面添加行。关于ListView.DataSource的文档并不多。就这样- 如果要从ListView中添加/追加/前置/更新/删除行,只需更新数据源并在setState中调用cloneWithRows()。 例如,我想从URL获取数据。每次点击“加载更多”,我都会向数据源追加新行
getInitialState: function(){
return {
rawData: [],
dataSource: new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2
}),
loaded: false,
page: 1,
}
},
第一次,我在ComponentDidMount()中调用这个函数,它用初始数据填充我的ListView,并且状态为“page”=1
reloadData: function(){
this.setState({ loaded: false, rawData: [], page: 1 });
API.getUpcomingMovies(this.state.page)
.then((data) => {
this.setState({
rawData: this.state.rawData.concat(data),
dataSource: this.state.dataSource.cloneWithRows(this.state.rawData.concat(data)),
loaded: true,
});
});
},
每次我点击“LoadMore”从API获取JSON时,我都会调用以下函数。每当我点击“加载更多”时,“页面”就会增加
如您所见,我正在连接我的rawData[](这是一个包含JSON对象的简单数组)。如果您想在rawData中预先添加新数据,可以执行以下操作-
this.setState({
rawData: data.concat(this.state.rawData)
)}
嘿,如果我的回答对你有好处的话,请记下我的正确答案!帮助一位程序员同事:)谢谢你的回答!当我这样做时,它会跳上几行。有什么想法可以避免这种情况吗?预加和追加是完全不同的。预渲染时,由于数据源中的数据发生了更改,因此需要进行完整的重新渲染。例如,当您在数据源中有[{id:1},{id:2}]时,现在如果您的前缀为{id:0},则新的数据源是[{id:0},{id:1},{id:2}],正如您所看到的,所有行都已更改,并且会发生完全重新渲染。@ericls您可以通过为行提供唯一的
键
道具,而不是将数组索引
(与映射
函数一起提供的)作为键
来避免完全重新渲染。如果要显示问题列表,只需传递question.id
-
this.setState({
rawData: data.concat(this.state.rawData)
)}