花了一上午时间,研究了一下当点击Flatlist的某一个item,然后删除这个item
具体的点击事件:
//item点击事件回调
_clickTransactionItem = (transTp, transactionItem, index,acctTpId) => {
let arr0 = this.state.pointTransList;
arr0.splice(index, 1);
this.setState({
pointTransList:arr0
})
// this.props.clickItemCallBack && this.props.clickItemCallBack(transTp, transactionItem, index,acctTpId);
}
但是测试,发现数据源改变了,界面没有改变。网上看了些方法:
方法1:flatlist 增加属性1
extraData={this.state}
方法2:flatlist增加属性2
handleMethod = {({viewableItems}) => this.handleViewableItemsChanged(viewableItems)}
试了,还是没解决。最后想到了keyExtractor,我的写法是:
keyExtractor={this._keyExtractor}
_keyExtractor = (item, index) => index.toString();
这个是不是太简单了,隐约记得官网有提到列表更新要写得复杂一点,于是改成了这样:
_keyExtractor = (item, index) => item.transDt + index.toString();
完美解决列表更新的问题。官网给的解释是:
keyExtractor
Used to extract a unique key for a given item at the specified index. Key is used for caching and as the react key to track item re-ordering. The default extractor checks item.key
, then falls back to using the index, like React does.
所以如果在有更新列表时,这个key稍微写得复杂一点。