2017-04-02 7 views
1

私はコレクションのサーバーデータを取得しようとしていますが、コードは曖昧ですが、定義されていません。Reactを使用してクライアント側のMeteorコレクションからデータを取得するにはどうすればよいですか?

import { Posts } from '../../../api/posts.js'; 
 

 
class FeedUnit extends Component { 
 

 
    constructor(props) { 
 
     super(props); 
 

 
     this.state = { 
 
      open: true, 
 
      emojis: false, 
 
      isOver: false, 
 
      likes: this.setLike(), 
 
     }; 
 
    } 
 
    
 
    setLike(){ 
 
    let self = this; 
 
    let like; 
 

 
    let post = Posts.findOne({ external_id: this.props.data.id }); 
 
    console.log(Posts.findOne({})) 
 
    return like; 
 
    } 
 

私はすでに手動でデータベースを検索し、そこに私は、コマンドを使用して正しいリターンを持っていた:

db.posts.findOne({external_id: '1402366059774445_1503319816345735'})

+0

let post = Posts.findOne({external_id:self.props.data.id}); – Ved

+1

コレクションの投稿には、サーバーからPostにカーソルを '公開 'し、クライアントで' subscribe'しない限り、文書は含まれません。 –

+0

ありがとう@mostafizrahman、それは解決策でした! –

答えて

1

私はFOU ND @mostafizラーマンのコメント内の溶液が、私はこのように、publishsubscribeを置く必要があります。

if (Meteor.isServer) { 
 
    // This code only runs on the server 
 
    // This is necessary to reatrieve data on the client side 
 
    Meteor.publish('posts', function tasksPublication() { 
 
    return Posts.find(); 
 
    }); 
 
}

componentDidMount() { 
 
    Meteor.subscribe('posts'); 
 
    }

0
Posts.findOne is async function you need either to get data from callback or by promise as below 
Posts.findOne({ external_id: this.props.data.id }) 
.then((posts)=>{ 
//do whatever you want 
}) 
.catch(err=>console.log(err)) 
1

私は最善の解決策だと思いますMeteor/reactのためにコネクターを使用しています。私はreact-komposerが好きです。

function getTrackerLoader(reactiveMapper) { 
    return (props, onData, env) => { 
    let trackerCleanup = null; 
    const handler = Tracker.nonreactive(() => { 
     return Tracker.autorun(() => { 
     // assign the custom clean-up function. 
     trackerCleanup = reactiveMapper(props, onData, env); 
     }); 
    }); 

    return() => { 
     if(typeof trackerCleanup === 'function') trackerCleanup(); 
     return handler.stop(); 
    }; 
    }; 
} 

そして、そのラップコンポーネント後:

Uはちょ​​うど許可流星コレクションの変化を追跡するように反応する関数を作成する必要があり

import { Posts } from '../../../api/posts.js'; 

     class FeedUnit extends Component { 

      constructor(props) { 
       super(props); 

       this.state = { 
        open: true, 
        emojis: false, 
        isOver: false, 
        likes: this.setLike(), 
       }; 
      } 

      setLike(){ 
       let self = this; 
       let like; 

       let post = this.props.post 
       console.log(post) 
       return like; 
      } 
} 
function reactiveMapper(props, onData) { 
    if (Meteor.subscribe('posts').ready()) { 
     let post = Posts.findOne({ external_id: props.data.id }); 
     onData(null, { post }); 
    } 
} 

export default compose(getTrackerLoader(reactiveMapper))(FeedUnit); 

詳細についてはdocsを見て。

関連する問題