このアプリケーションには、react js および Tracker React と一緒に Meteor 1.3 を使用しています。アプリケーションで使用可能なすべてのユーザーを表示するページがあります。このページでは、データを表示するためにユーザーがログインする必要があります。ユーザーがログインしていない場合、ログイン フォームが表示され、ログインすると、コンポーネントはユーザーのデータをレンダリングします。
ロジックのメイン コンポーネント。
export default class MainLayout extends TrackerReact(React.Component) {
isLogin() {
return Meteor.userId() ? true : false
}
render() {
if(!this.isLogin()){
return (<Login />)
}else{
return (
<div className="container">
<AllUserdata />
</div>
)
}
}
}
そしてAllUserdata
コンポーネントで:
export default class Users extends TrackerReact(React.Component) {
constructor() {
super();
this.state ={
subscription: {
Allusers : Meteor.subscribe("AllUsers")
}
}
}
componentWillUnmount(){
this.state.subscription.Allusers.stop();
}
allusers() {
return Meteor.users.find().fetch();
}
render() {
console.log('User objects ' + this.allusers());
return (
<div className="row">
{
this.allusers().map( (user, index)=> {
return <UserSinlge key={user._id} user={user} index={index + 1}/>
})
}
</div>
)
}
};
問題は、ログイン時に現在のユーザーのデータのみが表示されることです。他のすべてのユーザー オブジェクトはレンダリングされません。コンソールで確認すると、console.log('User objects ' + this.allusers());
レンダリングされているオブジェクトが 3 回表示されます。最初のレンダリングでは現在のユーザーのデータのみが表示され、2 番目のレンダリングではすべてのユーザーのデータがレンダリングされ (目的の結果)、3 番目のレンダリングでは現在のユーザーのデータのみが再びレンダリングされます。
ページを更新すると、ユーザー データが正しく表示されます。
理由はありますか?