2017-01-25 3 views
1

Ich versuche, von db-models zu ListView zu holen. Hier ist mein Code:Reactive Native fetch von db-models

export default class todoDB extends Component { 
constructor(props) { 
    super(props); 
    this.state = { 
     dataSource : new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}) 
    }; 

} 
componentDidMount() { 
    this.fetchData(); 

} 
fetchData() { 
    DB.users.get_all(function(result) { 
     let data = []; 
     for(let i = 1; i <= result.totalrows; i++) { 
      data.push(result.rows[i]); 
     } 
     this.setState({ 
      dataSource: dataSource.cloneWithRows(data), 

     }) 

    }); 

} 
render() { 
    return (
     <ListView 
      dataSource={this.state.dataSource} 
      renderRow={this.renderList} 
      /> 
    ); 
} 
renderList (item) { 
    return (
     <View> 
      <Text>{item.age}</Text> 
     </View> 
    ); 
}}; 

Nach dem Ausführen habe ich keinen Fehler oder keine Ausgabe, nur leerer Bildschirm. ich mit

  • "reagieren": "15.4.2",
  • "reagieren-native": "0.40.0"
  • "reagieren-native-db-Modelle": „^ 0,1. 3"
+0

ist '' 'this''' innerhalb der Funktion (Ergebnis), immer noch an die Klasse gebunden? –

+0

Ich glaube, Sie haben einen Fehler in 'fetchData()', im 'setState' sollte es' dataSource: this.state.dataSource.cloneWithRows (Daten) ' – kuby

+0

@kuby Ich denke, Sie haben Recht, aber dann sollte er verwenden '' 'prevState''' Beispiel:' '' this.setState ((prevState, reps) => {}) '' '(https://facebook.github.io/react/docs/react-component.html# setstate) –

Antwort

3

ich habe es nicht getestet, aber man könnte versuchen, diese:

fetchData() { 
    DB.users.get_all((result) => { 
     let data = []; 
     for (let i = 1; i <= result.totalrows; i++) { 
     data.push(result.rows[i]); 
     } 
     this.setState((prevState) => (
     { 
     dataSource: prevState.dataSource.cloneWithRows(data) 
     })); 

    }); 
    } 

Änderungen sind: mit dem Pfeil Funktion statt function(result) den Umfang von 0 zu haltenund den vorherigen Zustand zu aktualisieren prevState.dataSource.cloneWithRows(data) (im Code dataSource war hier undefined)

Wie, warum prevState verwenden, ist es Unveränderlichkeit zu halten. Ein bisschen mehr Infos hier: https://facebook.github.io/react/docs/react-component.html#setstate

+0

danke. Es klappt – Vadim