Flatlist刪除列表中的某一個item,並刷新界面顯示

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章