2016-07-25 12 views
0

Ich versuche, einen Ajax-Aufruf mit einem React-Container (rein um die Daten zu holen und es an seine Kinder weitergeben), aber ich bekomme nichts.Daten nicht angezeigt, wenn eine Ajax-Anfrage in React

Stattdessen erhalten Sie die folgenden Fehler:TypeError: Cannot read property 'map' of undefined. Was im Grunde sagt mir, dass die users entweder leer oder noch nicht definiert ist, oder?

Im Moment folge ich der folgenden Struktur UserListContainer (holt die Daten) =>UserList Component (zeigt die Daten als eine Stütze).

Userlist Container

// Container responsible only to fetch User data 
import React from 'react'; 
import UserList from '../../ui/components/users/userList.jsx'; 


export default class UserListContainer extends React.Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      users: [] 
     } 
    } 


    componentDidMount() { 
     $.ajax({ 
      // url: "../../users/users.json", 
      url: "https://gist.githubusercontent.com/dantesolis/267a298f3d6ac524bc2a7d80960a16b5/raw/7929bb23f1757b85adcead4eed3023cd3c7453df/users.json", 
      dataType: "json", 
      success: function(users) { 
       this.setState({users: users}); 
      }.bind(this) 
     }); 
    } 

    render() { 

     // const usr = this.props.user; 
     // let usrs = users_mockup ? users_mockup : this.props.users; 

     return (
      <UserList users={this.state.users} /> 
     ); 
    } 
} 

Userlist Component

import React from 'react'; 
import User from '../users/user.jsx'; 
// import { Link } from 'react'; 


export default class UserList extends React.Component { 
    constructor(props) { 
     super(props); 
    } 

    renderUser({name, _id}) { 
     return <li>{_id}-{name}</li> 
    } 


    render() { 
     return (
      <div className="main"> 
       <ul>{this.props.users.map(renderUser)}</ul> 
      </div> 
     ); 
    } 
} 

Hilfe sehr geschätzt wird. Danke

Antwort

1

Das ist, weil usersundefined im success Rückruf ist. Dies kann passieren, weil die URL nicht korrekt funktioniert. Nach einem Blick at it scheint es, dass es Javascript zurückgibt und nicht json. Sie sollten versuchen, den Kommentar in der ersten Zeile zu entfernen, damit er json-kompatibel ist.

+0

Gonzales, immer noch das gleiche Problem. Ich würde gerne sehen, was innerhalb dieser Benutzervariable ist, aber kann nicht ein 'console.log' zu arbeiten – intercoder

+0

Ich ersetzte die URL mit der gleichen JSON [ohne den Kommentar in der ersten Zeile] (https://gist.githubusercontent.com/ dgonz64/c296dd465b91dd09ff65e1b5aeec66f8/roh/895edcadc3796c42932b2ecb266d7fc845f02214/test-another-json.json) und es funktioniert (ich bekomme die Objekte). Sie können versuchen, indem Sie "Fehler" -Rückruf zu "$ .json" hinzufügen, um zu sehen, ob in Ihrer Umgebung oder Ihrem Setup ein Problem vorliegt. Siehe [hier] (http://api.jquery.com/jquery.ajax/). –

+0

holen Sie die Daten über 'curl' oder wie? Ich bekomme es über 'curl', aber nicht über meine react-App. Danke für den Link. Lass mich mal sehen. – intercoder