2016-06-25 10 views
2

Ich baue eine einfache Sport App mit react, react-native, react-native-router-flux, react-redux, mit redux und versuchen, eine api von Top-News Objekt zu ziehen zu meinem view. Das Objekt, das ich brauche, wird auf meiner console log angezeigt, kann aber nicht auf meiner view angezeigt werden.mit Redux: API-Objekte in meiner console.log erscheinen aber nicht meine Ansicht

Der Fehler, ich bin immer ist:

Cannot read property 'cloneWithRowsAndSections' of undefined

TypeError: Cannot read property 'cloneWithRowsAndSections' of undefined at NewsList.componentWillMount

Gibt es etwas, das ich fehle?

Newsliste:

export default class NewsList extends Component { 
    constructor(props){ 
    super(props); 
     const ds = new ListView.DataSource({ 
     rowHasChanged: (row1, row2) => row1 != row2, 
     sectionHeaderHasChanged: (s1, s2) => s1 !== s2 
     }); 
     this.state = { 
     dataSource: ds.cloneWithRowsAndSections(props.ListData) 
     } 
    } 

    componentWillReceiveProps(nextProps){ 
    const dataSource = this.state.dataSource.cloneWithRowsAndSections(nextProps.ListData); 
    this.setState({dataSource}); 
    } 


    componentWillMount(){ 
    // console.log("whats This: ",this.props.ListData); 
    let data = this.props.ListData; 
    this.setState({ 
     dataSource: this.ds.cloneWithRowsAndSections(data) 
    }); 
    } 

News_View:

render(){ 
console.log('TopNews', this.state.TopNews); 
if(this.state.TopNews.length == 0){ 
    return(
    <View style={styles.container}> 

     <View style={styles.LiveStyle}> 
     <Live style={styles.LiveStyle} /> 
     </View> 

     <View style={styles.container}> 
     <Text style={[styles.NotFollowTeamMsg, styles.centerTeamMsg]}> 
      Your not connected to the api 
     </Text> 
     </View> 
    </View> 
) 
} else { 
    return (
     <View style={styles.container}> 
     <NewsList 
      ListData={this.state.TopNews} 


     /> 
     </View> 
) 
} 


} 

im Konstruktor ich const ds = ..., wie this.ds = ... versucht zu ändern, sondern dass nur auf den Fehler führen:

ds is not defined ReferenceError: ds is not defined

Ich habe versucht, Herausnehmen der Konstruktorfunktion:

const ds = new ListView.DataSource({ 
rowHasChanged: (row1, row2) => row1 != row2, 
sectionHeaderHasChanged: (s1, s2) => s1 !== s2 
}); 

suchen Sie es außerhalb der Newslist Klasse, und ich setState, wie folgt aus:

this.setState({ 
    dataSource: ds.cloneWithRowsAndSections(data) 
}); 

aber nur auf den Fehler führen:

Cannot read property 'bind' of undefined TypeError: Cannot read property 'bind' of undefined

Antwort

2

2 Optionen:

1.In Ihrem Konstruktor machen Sie die const ds = ..., wie this.ds = ...

aus der constructor Funktion

diese 2.Take:

const ds = new ListView.DataSource({ 
rowHasChanged: (row1, row2) => row1 != row2, 
sectionHeaderHasChanged: (s1, s2) => s1 !== s2 
}); 

und suchen Sie es außerhalb der NewsList Klasse.

Wenn Sie jetzt setState, tun Sie es wie folgt aus:

this.setState({ 
    dataSource: ds.cloneWithRowsAndSections(data) 
}); 
+0

ich schon diese beiden Optionen @ gran33 versucht haben. Der Fehler, der herauskommt, ist: $ ds ist nicht definiert ReferenceError: ds ist nicht definiert $ – Checkk

+0

@Checkk Ich habe Ihren Fehler auch, und mein Vorschlag funktionierte für mich. Deine Klasse kennt deine 'ds'-Variable nicht, da du sie nicht zu' this.ds = ... 'hinzugefügt hast – gran33