2016-08-03 6 views
0

Вот мой магазин:не может понять, почему данные не будут загружаться в React компонента

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(); 

Когда я console.log сообщений в функции помощника, я получаю правильные данные. Но когда I console.log из компонента, массив сообщений пуст.

Вот мой компонент:

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

Ваш helper.get ('/ api/posts') является запросом ajax. Когда конструктор загружает его, он не дожидается, когда данные будут на самом деле извлечены. – Shaunak

+0

Как я могу заставить его ждать получения данных? – bounty

+0

Это поможет, если вы создадите небольшой рабочий пример jsfiddle для репликации проблемы. – Shaunak

ответ

0

Я бы не использовать ваш PostStore как есть. Вместо этого просто используйте свой помощник прямо так:

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

Почему этот код работает на reactjs, но тот же код не работал на native-native? http://stackoverflow.com/questions/39295108/reactjs-listview-to-react-native-listview – TeodorKolev