2016-08-05 2 views
6

データはこのFirebase:入社テーブル

post: { 
    authorId: '123AA', 
    title: 'first Post', 
    body: 'yay' 
} 

author: { 
    uid: '123AA', 
    displayName: 'Richard' 
    email: '[email protected]' 
} 

のように見える、私は著者の名前のポストをレンダリングしたいと仮定します。

<div className="post"> 
    <div className="title">{post.title}</div> 
    <div className="body">{post.body}</div> 
    <div className="author-name">{post.author.displayName}</div> //problem 
</div> 

フェッチされた後のアイテムのみが著者のuidが含まれていますが、私は著者のdisplayNameが必要です。投稿を取得する際に投稿者フィールドを埋め込むにはどうすればよいですか?実際のfirebaseで

const postsRef = firebase.database().ref('posts/') 
postsRef.on('value', (snapshot) => { 
    this.setState({posts: snapshot.val()}) 
}) 
+1

その優れたが、タグからreactjsを除去するのに役立ちます、質問は限り私はあなたを知っているよう – webdeb

+1

リアクトとは何の関係もありませんあなたはfirebaseと "結合"することはできません、あなたは別のコレクションから何かを得るために二度目の要求をする必要があります –

+1

それは人々が何をしているのですか?追加されるすべての投稿について、サーバーからユーザーオブジェクトを取得する別のリクエストを行いますか? –

答えて

7

わからないが、私はangular2でかなり頻繁に参加する使用:これは私が今の記事を取得するために何をすべきかです。ここで私のサンプルコードです。

import { Component, OnInit } from '@angular/core'; 
import { AngularFire } from 'angularfire2'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 

@Component({ 
    selector: 'app', 
    templateUrl: ` 
    <ul> 
     <li *ngFor="let p of posts | async"> 
      {{ p.title }} - {{ (p.authorName | async)?.displayName }} 
     </li>   
    </ul> 
` 
}) 
export class InitComponent implements OnInit { 
    posts: Observable<any[]>; 

    constructor(private af: AngularFire) {} 

    ngOnInit() { 
     this.posts = this.af.database.list('/posts') 
     .map(posts => { 
      posts.map(p => { 
       p.authorName = this.af.database.object('/authors/'+p.authorId); 
      }); 
      return posts; 
     }); 
    } 

データベース構造が次のように

/posts/postId/{authorId, title, body} 
/authors/authorId/{displayName, email} 

ホープこれは