listview - 当 this.state 改变(但不是数据源)时如何强制重绘 ListView。

标签 listview react-native

我创建了一个使用 ListView 的组件以显示联系人列表。单击一行时,我会更新 state 中的数组的组件,包含所有选定的联系人。但是,我没有将此数组用作 dataSource我的 ListView成分。

我想重绘ListView每次修改此数组以显示所选联系人的图像时。

这是我目前情况的一个例子:

renderListView: function(){
    <ListView
        dataSource={this.state.dataSource}
        renderRow={this.renderRow}
        style={styles.listView}
    />
}
renderRow:function(row){
    return if(this.state.something === true) <Text>Something</Text>
   else <Text>Something Else</Text>
}

我试着打电话 .forceUpdate() ,它调用 render方法而不是 renderRow方法。

有什么建议吗?

最佳答案

我刚刚遇到了同样的问题。在这里查看我的问题:React Native ListView not updating on data change

基本上,ListView 组件似乎存在一个错误,您需要重建数据源中更改的每个项目,以便 ListView 重新绘制它。

这是一个工作示例:
https://rnplay.org/apps/GWoFWg

首先,创建数据源和数组的副本并将它们保存到状态。就我而言,foods是数组。

constructor(props){
    super(props);
    var ds = new ListView.DataSource({
        rowHasChanged: (row1, row2) => row1 !== row2,
    });
    this.state = {
        dataSource: ds.cloneWithRows(foods),
        db: foods,
    };
}

当您想要更改数据源中的某些内容时,请复制您保存到状态的数组,使用更改重建项目,然后将更改后的新数组保存回状态(db 和数据源)。
onCollapse(rowID: number) {
    console.log("rowID", rowID);
    var newArray = this.state.db.slice();
    newArray[rowID] = {
        key: newArray[rowID].key,
        details: newArray[rowID].details,
        isCollapsed: newArray[rowID].isCollapsed == false ? true : false,
    };
    this.setState({
        dataSource: this.state.dataSource.cloneWithRows(newArray),
        db: newArray,
    });
}

关于listview - 当 this.state 改变(但不是数据源)时如何强制重绘 ListView。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33436902/

相关文章:

Android ListView 滞后于复杂的布局

ios - 可扩展的 ListView 不会 swift 折叠

firebase - 在模块 ExpoPushTokenManager 上执行导出方法 getDevicePushTokenAsync 时发生异常

javascript - TextInput 的 React-Native Expo 问题

android - 用于 React Native Android 的 XMPP 库

android - react native "Execution failed for task: ' :app:processDebugManifest' after adding Admob module

android - 单击按钮通过 CAB 动态选择和删除 ListView 项目,而不是通过长按

android - 如何更改特定 ListView 的项目或元素的颜色

listview - 如何在调整页面大小后调整 UWP ListView 的大小以适应页面?

reactjs - 如果样式是在组件级别完成的,为什么 nativewind 样式不起作用?