react-native ListView bug解決辦法

昨天實現ListView加載圖片時,出現了一個坑爹的問題,數據源如果在類里聲明好,加載無問題,但是用網絡請求獲取數據后,界面顯示圖片不全。

顯示沒問題時的數據源
const data = [{
    url: 'https://avatars2.githubusercontent.com/u/7970947?v=3&s=460'
}, {
    url: 'https://avatars2.githubusercontent.com/u/7970947?v=3&s=460'
}, {
    url: 'https://avatars2.githubusercontent.com/u/7970947?v=3&s=460'
}, {
    url: 'https://avatars2.githubusercontent.com/u/7970947?v=3&s=460'
}, {
    url: 'https://avatars2.githubusercontent.com/u/7970947?v=3&s=460'
}, {
    url: 'https://avatars2.githubusercontent.com/u/7970947?v=3&s=460'
}];
    ...
    constructor(props) {
        super(props);
        let ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
        this.state = {
            dataSource: ds.cloneWithRows(data),
        };
    }
    ...
顯示有問題時的數據源
    ...
    constructor(props) {
        super(props);
        let ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
        this.state = {
            dataSource: ds,
        };
    }
    ...
    // 獲取數據成功方法
    getOrderPictureSuccessCallBack(result) {
        if(result){
            this.setState({
                dataSource: this.state.dataSource.cloneWithRows(result),
            });
        }
    }
    ...

查了很多資料,還是沒發現問題出在哪,后來將renderRow中的<Image>改為<Text>,還是顯示不全,但這時我滑動了屏幕,竟然顯示完全了,然后就去搜了下問題,果然有解決方案:在listView中添加removeClippedSubviews屬性。

    <ListView
       removeClippedSubviews={false}
       dataSource={this.state.dataSource}
       renderRow={this.renderRow}
       contentContainerStyle={styles.listViewStyle}
     />

問題解決,再將<Text>換回<Image>。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容