2016-08-03 18 views
0

Hier Reagieren geladen ist mein Speicher:Kann nicht herausfinden, warum die Daten nicht in der Komponente

import helper from './../../helpers/RestHelpers.js'; 

var posts = []; 

class PostStore { 

    constructor() { 
     helper.get('/api/posts') 
      .then((data) => { 
       posts = data; 
       console.log(posts); 
      } 
     ); 
    } 

    getPosts() { 
     return posts; 
    } 

}; 

export default new PostStore(); 

Wenn ich console.log Beiträge in Helfer-Funktion, erhalte ich die richtigen Daten. Aber wenn ich console.log von der Komponente, ist das Array von Posts leer.

Hier ist meine Komponente:

import React from 'react'; 

import postStore from '../stores/PostStore'; 

class Home extends React.Component { 

    constructor() { 
     super(); 
     this.state = { 
      posts: postStore.getPosts() 
     } 
     console.log(this.state.posts); 
    } 

    render() { 
     return (
      <div className="welcome"> 
       {this.state.posts.map(function(post, index) { 
       return (
         <PostItem post={post} key={"post " + index} /> 
        ) 
       }) 
      } 
      </div> 
     ) 
    } 
} 

class PostItem extends React.Component { 
    render() { 
     return <div>{this.props.post.postName}</div>; 
    } 
} 

export default Home; 
+2

Ihre helper.get ('/ api/posts') ist eine Ajax-Anfrage. Wenn der Konstruktor ihn lädt, wartet er nicht darauf, dass die Daten tatsächlich abgerufen werden. – Shaunak

+0

Wie würde ich einstellen, dass auf das Abrufen der Daten gewartet wird? – bounty

+0

Es wäre hilfreich, wenn Sie ein kleines funktionierendes Beispiel in jsfiddle erstellen, um das Problem zu replizieren. – Shaunak

Antwort

0

würde ich nicht benutzen, um Ihre PostStore wie sie ist. Verwenden Sie stattdessen einfach Ihren Helper direkt wie folgt:

import React from 'react'; 
// import your helper! 

class Home extends React.Component { 

    componentDidMount() { 
     helper.get('/api/posts').then((data) => { 
     this.setState({posts: data}) 
     }); 
    } 

    render() { 
     return (
      <div className="welcome"> 
       {this.state.posts.map((post, idx) => <PostItem post={post} key={"post " + idx} />)} 
      </div> 
     ) 
    } 
} 
+0

Warum funktioniert dieser Code auf reactjs, aber der gleiche Code hat nicht auf reactive-native funktioniert? http://stackoverflow.com/questions/39295108/reactjs-listview-to-react-native-listview – TeodorKolev