2016-06-28 8 views
0

ログインしたユーザーのメールアドレスを流星で表示しようとしています。流星 - ログインユーザーのメールアドレスを表示

私はMeteor.user()。emails [0] .addressコマンドを使用していますが、これはときどき動作します。それ以外は未定義です。これは、ユーザーのコレクションが利用可能になる前にページがレンダリングされることがあるためです。

しかし、私はリアクトを使用しています。オンラインのすべてのソリューションは、テンプレートのonCreated部分でMeteor.subscribe()を使用するよう提案しています。しかし、私はReactの同等物を理解することができず、レンダリングする前にUserコレクションを待つ方法を理解できません。

答えて

0

Meteorの反応性のあるソースが更新されるたびに実行されるコールバック関数を受け付けるMeteor.autorunを使用するように更新されました。

Meteor.subscribeは、オプションのコールバックonReadyを受け入れます。 ReactコンポーネントのライフサイクルイベントcomponentWillMountにアタッチし、流星サブスクリプションをセットアップして、onReadyが解雇されたら状態を変更します。ここにいくつかの大まかなサンプルコードがあります。

var Foo = React.createClass({ 
    componentWillMount: function() { 
    var _this = this; 

    // Setup meteor subscription 
    Meteor.autorun(function() { 
     _this.setState({ 
     user: Meteor.user(), 
     }); 
    }) 
    }, 
    render: function() { 
    // Render nothing until we have a user 
    if (!this.state || !this.state.user) { 
     return null; 
    } 

    // Render the address when we have the user 

    return (
     <div>{this.state.user.emails[0].address}</div> 
    ); 
    } 
}); 

関連ドキュメント:http://docs.meteor.com/api/pubsub.html#Meteor-subscribe

+0

私はこのコードを試してみましたが、それは表示されません。私のパブリッシュコマンドはどのように見えますか? – Laugh7

+0

Meteor.autorunを使用するように更新されました。私はMeteorコードに精通しているわけではないので、なぜあなたがUsersコレクションに登録できないのかは確かではありません。自動実行は、反応するソースが変更されるたびにコールバックを実行するので、この場合はうまくいきます。ここには、Autorun https://www.discovermeteor.com/blog/reactivity-basics-meteors-magic-demystified/を議論するブログ記事が掲載されています。 –

関連する問題