我现在有几个建议的解决方案,但无法让它们工作。我通过正确复制旧数组来更新列表视图时遇到问题。 到目前为止我的解决方案(不起作用:-()不要重新阅读列表视图。
const data = [{
id: 1,
selected: true,
}, {
id: 2,
selected: false,
}, {
id: 3,
selected: false,
}]
const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
this.state = {
dataSource: ds.cloneWithRows(data),
data: data,
}
要更新行我使用此代码:
_updateRow = (rowData, rowID) => {
let newArray = this.state.data.slice();
newArray.map((o, index) => {
if (o.id = rowData.id){
o.selected = true;
}
else {
o.selected = false;
}
})
this.setState({
dataSource: this.state.dataSource.cloneWithRows(newArray),
data: newArray
})
}
我想将一个属性(已选中)从index更改为true,将所有其他对象(已选中)更改为false。 希望有人能提供帮助。寻找最干净的解决方案。
问候
答案 0 :(得分:2)
YEAH !!! 解决了它。 以下是代码:
_updateRow = (rowData, rowID) => {
let newArray = this.state.data.slice();
newArray.map((o, index) => {
newArray[index] = {...o, selected: true};
else
newArray[index] = {...o, selected: false};
})
this.setState({
dataSource: this.state.dataSource.cloneWithRows(newArray),
data: newArray
})
}
任何人都有更好的解决方案吗?
答案 1 :(得分:0)
也许下面的代码?
_updateRow = (rowData) => {
let newArray = [].concat(this.state.data);
newArray.map((o, index) => {
return {...o, selected: o.id === rowData.id}
});
this.setState({
dataSource: this.state.dataSource.cloneWithRows(newArray),
data: newArray
})
}