花了一上午時間,研究了一下當點擊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稍微寫得複雜一點。