2017-02-04 3 views
0

У меня есть список, содержащий список строк. Первоначально массив, из которого он получает свои строки, должен быть пустым, но для его проверки я предоставил данные. Однако он не появляется. Он отображается только при вызове lapPressed, который предназначен для добавления строки в таблицу с новой строкой. И новая строка добавляется только после того, как я снова нажму кнопку. Эти петли и новые данные добавляются только после вызова lapPressed снова.React-Native ListView неправильно загружает данные

Резюмируя:

  • начальных элементов кругов массива не показывает, пока lapPressed не называются
  • Новых строк не отображается до тех пор, lapPressed не был назван дважды

I удалили нерелевантный код, Вот мой код:

constructor(props) { 
    super(props); 

    var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 
    //dataSource: this.state.dataSource.cloneWithRows(this.state.laps) 

    this.state = { 
     laps: [2,3], 
     dataSource: ds.cloneWithRows(this.laps), 
    } 
    } 


    render() { 
    return <View> 

     {this.showList()} 

    </View> 
    } 


    showList() { 
    return <ListView 
     dataSource={this.state.dataSource} 
     renderRow={this.renderRow.bind(this)} 
     /> 
    } 

renderRow(rowData, sectionID, rowID) { 
    return (
     <View style={styles.row}> 
     <Text style={styles.rowText} numberOfLines={1}>{rowData}</Text> 
     </View> 
    ); 
    } 


lapPressed =() => { 

    var lap = formatTime(this.state.timeElapsed); 

    this.setState({ 
     startTime: new Date(), 
     laps: this.state.laps.concat([lap]), 
     dataSource: this.state.dataSource.cloneWithRows(this.state.laps) 
    }); 
    return 

    } 

ответ

0

Это ваша проблема:

this.state = { 
    laps: [2,3], 
    dataSource: ds.cloneWithRows(this.laps), 
} 

this.laps не определен. Он должен быть this.state.laps, но это также не указано здесь. Я думаю, что это то, что вам нужно:

var laps = [2, 3]; 

this.state = { 
    laps: laps, 
    dataSource: ds.cloneWithRows(laps), 
} 
+0

Это означает, что первые элементы появляются при запуске, но вторая проблема все еще существует. Когда я вызываю lapPressed, ничего не обновляется, когда я нажимаю его снова, он обновляется, он всегда один позади. – james

+0

Такая же проблема. Ваш вызов 'cloneWithRows' получает предыдущее значение кругов. 'this.state.laps' еще не обновлен. –

+0

Спасибо, я просто подумал об этом в то же время :) – james

0

Ну это потому, что я оказывал старое государство в lapPressed, это правильная версия.

lapPressed =() => { 

    var lap = formatTime(this.state.timeElapsed); 
    var temp = this.state.laps.concat([lap]) 

    this.setState({ 
     startTime: new Date(), 
     laps: temp, 
     dataSource: this.state.dataSource.cloneWithRows(temp) 
    }); 

    return 

} 
Смежные вопросы