2016-05-07 6 views
0

Ich arbeite an einer kleinen App, die einige Daten aus einer JSON-Datei (Spielstände) ziehen wird. Derzeit erhalte ich den Fehler games.map is not a function. Ich sah einen anderen Post in Stack Overflow, der ähnlich war, aber die Antwort war, dass der Anfangszustand kein Array war, aber ich habe meinen Ausgangszustand als Array festgelegt, also glaube ich nicht, dass es zutrifft. Unten ist mein React JS kann mir jemand in die richtige Richtung zeigen? Könnte es etwas mit der JSON-Struktur zu tun haben? Sie können die JSON-Datei here finden. Dankesehr!.map ist keine Funktion React

class SingleGame extends React.Component{ 
    render(){ 
    return(
     <div>{this.props.homeTeam}</div> 
    ); 
    } 
} 

class GameBox extends React.Component{ 

    constructor() { 
    super(); 

    this.state = { 
     games: [] 
    }; 
    } 

    componentWillMount() { 
    this._getGameScores(); 
    } 

    componentDidMount() { 
    this._timer = setInterval(() => this._getGameScores(), 45000); 
    } 

    componentWillUnmount() { 
    clearInterval(this._timer); 
    } 

    _getGameScores(){ 
    jQuery.ajax({ 
     method: 'GET', 
     url: 'http://pinetar-app.com/src/client/app/mlb-scoreboard.json', 
     success: function(games){ 
     this.setState({games: games.data}); 
     }.bind(this) 
    }); 
    } 

    _mapGameScores(){ 
    const games = this.state.games; 

    return games.map((games) => { 
     return(
     <SingleGame homeTeam={games.game.home_team_name} /> 
    ); 
    }); 
    } 

    render() { 
    const gameList = this._mapGameScores(); 
    return(
     <div> 
     {gameList} 
     </div> 
    ); 
    } 
} 

ReactDOM.render(
    <GameBox />, document.getElementById('pinetar') 
); 
+0

können Sie Spiele anmelden, bevor Sie zurückkommen es in? – JordanHendrix

+0

'Daten' scheint ein Objekt zu sein, kein Array –

+0

Ja, und es sieht so aus, als ob es ein' Objekt' zurückgibt und dann ist das ein Array von Spielen, die Objekte sind. Ich denke, die Fragen werden nun, wie kann ich auf diese Objekte zugreifen? Sie können einen 'console.log' Screenshot hier sehen: http://prnt.sc/b175rh @JordanHendrix – buschschwick

Antwort

2

Sie sind nicht das Array richtig zugreifen, versuchen Mapping über diese verwenden:

data.data.games.game 

wie so:

Working example

_getGameScores(){ 
    jQuery.ajax({ 
     method: 'GET', 
     url: 'http://pinetar-app.com/src/client/app/mlb-scoreboard.json', 
     success: function(data){ 
     this.setState({games: data.data.games.game }); 
     }.bind(this) 
    }); 
    } 
+1

Sie Sir, nur mein Wochenende gemacht. Ich lerne immer noch zu reagieren, also schätze ich es, dass du dir die Zeit genommen hast, zu helfen. Prost! – buschschwick

+0

jederzeit! Wir waren alle dort, glücklich zu helfen! – JordanHendrix