2016-08-22 17 views
0

私はreact-komposerを使用し、私のアプリで反応し、ある時点で私はユーザのprofileプロパティを変更します。Meteor.users現在のユーザを反映するコレクションアイテムです。ここでの問題は、renderのコールで応答的にループバックしないことです。私がMeteor.usersコレクションに何をしても、Meteor.user()renderの関数内で参照しても、コンポーネントを再レンダリングしません。私はMeteor.users購読の更新を購読する

render() { 
    console.log('rendered'); 

    /// ... 
} 

をすれば、私は二回しかコンソールに「レンダリング」を参照してくださいすることができます:コンポーネントが最初にレンダリングされ、いったん二時間、他のサブスクリプションの準備ができています。

私はMeteor.usersコレクションを購読したいと思いますが、方法があるかどうかわかりません。

私は間違いなくすべてのトラッカーループに反応するためにトラッカーを使うことができましたが、私には1.2も感じています。しかし、これが唯一の方法ですか?

また、私は間違いなくthis onethis oneのような程度Meteor.usersとして他のQ &を読んだことがあるが、パブリッシュ/サブスクライブへのユーザーのコレクションをラップするというアイデアは、直接不自然に感じ、そしてほとんどコレクション内のすべての更新を聴くための良い方法ではありません。

+0

Meteor.usersの公開および購読に不自然なことはありません。下の私の答えを見てください。 – rdk1992

答えて

2

meteor.usersコレクションに関するサーバーコードの出版物を作成する必要があります。

Meteor.publish('allUsers', function allUsers() { 
     return Meteor.users.find({}, { 
     fields: { 
      services: 0, 
     }, 
    }); 
    }); 

次に、あなたがそのパブリケーションにあなたのコンテナに加入しMeteor.usersコレクションを照会し、コンポーネントにその結果を送信することができます。

const composer = (props, onData) => { 
const userHandle = Meteor.subscribe('allUsers'); 
if (userHandle.ready()) { 
    const users = Meteor.users.find({}).fetch(); 
    onData(null, { 
     users, 
    }); 
} 
}; 
export default composeWithTracker(composer)(YourComponent); 

この後、YourComponent内のコレクションに対して行われた変更は、クライアント側に反映されます。