2017-05-12 96 views
0

我有動態數據分配給listview數據源的問題。 我已經在構造函數中進行了一個web服務調用,它返回jsonArray,然後在接收後我已將接收到的數據(JSONArray)分配給Listview的DataSource。React_native:錯誤未定義不是一個函數(評估'data.forEach)ListView錯誤

`constructor(props){ 
    let data= this.getActivityCalenderList(); 
    const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2, 
    sectionHeaderHasChanged: (s1, s2) => s1 !== s2}); 
    this.state = { 
    dataSource: ds.cloneWithRowsAndSections(this.convertArrayToMap(data))} 
    } 
    } 
    render() 
    { 
    return(
    <ListView dataSource={this.state.dataSource} 
     renderRow={(data) =><View>.....</View>}/>} 
    renderSectionHeader={(sectionData, startdatetime)=><View>....</View>} 
); 
    }` 

問題出在數據分配之前Listview正在呈現(靜態數據分配正在工作)。 任何幫助或建議?

回答

0

您可以通過創建dataObtained狀態變量來嘗試條件呈現。在componentWillMount上進行api調用,並僅在獲取數據時顯示列表視圖。希望這可以幫助!

constructor(props){ 
    const ds = new ListView.DataSource({ 
    rowHasChanged: (r1, r2) => r1 !== r2 
    }); 
    this.state = { 
    dataSource: ds.cloneWithRows([]), 
    dataObtained: false, 
    } 
} 

componentWillMount(){ 
    let data = this.getActivityCalenderList(); 
    this.setState({dataSource: ds.cloneWithRows(data), 
        dataObtained:true}); 
} 

render() 
{ 
    if(this.state.dataObtained){ 
    return(
     <ListView dataSource={this.state.dataSource} 
     renderRow={(data) =><View>.....</View>}/>} 
     renderSectionHeader={(sectionData, startdatetime)=><View>.... 
     </View>} 
    ); 
    }else{ 
    return(
     <View> 
     <ActivityIndicator/> 
     </View> 
    ); 
    } 

}` 
相關問題