获取meteor Js中所有注册用户的数据
我想获得meteorJS中所有注册用户的数据。根据meteorJS和stackOverflow的文档,在render函数中我尝试了一些方法(结果如commit所示)。当我在获取meteor Js中所有注册用户的数据,meteor,publish-subscribe,Meteor,Publish Subscribe,我想获得meteorJS中所有注册用户的数据。根据meteorJS和stackOverflow的文档,在render函数中我尝试了一些方法(结果如commit所示)。当我在db中实际有2个用户帐户时,我只收到一个空数组或订阅对象。users: db.users.find()的结果 也许有人知道这个问题。提前谢谢 客户机上的代码: import React, {Component} from 'react'; import ReactDOM from 'react-dom'; import {
db中实际有2个用户帐户时,我只收到一个空数组或订阅对象。users
:
db.users.find()的结果
也许有人知道这个问题。提前谢谢
客户机上的代码:
import React, {Component} from 'react';
import ReactDOM from 'react-dom';
import { Meteor } from 'meteor/meteor';
import {DialogServer} from './dialogServer.js';
export default class SendArea extends Component{
constructor(props){
super(props);
}
handleSubmit(event) {
event.preventDefault();
// Find the text field via the React ref
const text = ReactDOM.findDOMNode(this.refs.textInput).value.trim();
if(Meteor.userId())
DialogServer.insert({
text: text,
owner: Meteor.userId(), // _id of logged in user
username: Meteor.user().username, // username of logged in user
createdAt: new Date(), // current time
});
// Clear form
ReactDOM.findDOMNode(this.refs.textInput).value = '';
}
render(){
let allUsersDate=Meteor.subscribe('allUsers'); //{subscriptionId: "4nHErSSjJLJesWJcq", stop: ƒ, ready: ƒ}
let allUsersD = Meteor.users.find({}).fetch(); //Array(0)
return(
<div>
<form className="new_message" onSubmit={this.handleSubmit.bind(this)}>
<input type='text' ref="textInput" placeholder="message to send"/>
<button onClick={this.handleSubmit.bind(this)}>send</button>
</form>
</div>
)
}
}
您正在组件的渲染方法中订阅“allUsers”:
let allUsersDate=Meteor.subscribe('allUsers')//{subscriptionId:“4nherssjljeswjcq”,停止:ƒ,准备:ƒ}
让allUsersD=Meteor.users.find({}).fetch()//数组(0)
这不是正确的方法,并导致了几个问题。首先,您需要检查订阅是否已准备就绪,然后才能通过Meteor.users.find使用数据
let allUsersDate=Meteor.subscribe('allUsers');
if(allUsersDate.ready()){
让allUsersD=Meteor.users.find({}).fetch();//将返回所有用户
}
但是,即使您如上所示执行此操作,您的render
方法也可能在订阅准备就绪之前再次被调用。render方法仅用于渲染,不用于数据处理
您应该了解如何使用createContainer
将此数据传递给组件。这也使您的组件更易于重用和测试(因为所需的数据是通过道具注入的) 我试试看。谢谢。
import React, {Component} from 'react';
import ReactDOM from 'react-dom';
import { Meteor } from 'meteor/meteor';
import {DialogServer} from './dialogServer.js';
export default class SendArea extends Component{
constructor(props){
super(props);
}
handleSubmit(event) {
event.preventDefault();
// Find the text field via the React ref
const text = ReactDOM.findDOMNode(this.refs.textInput).value.trim();
if(Meteor.userId())
DialogServer.insert({
text: text,
owner: Meteor.userId(), // _id of logged in user
username: Meteor.user().username, // username of logged in user
createdAt: new Date(), // current time
});
// Clear form
ReactDOM.findDOMNode(this.refs.textInput).value = '';
}
render(){
let allUsersDate=Meteor.subscribe('allUsers'); //{subscriptionId: "4nHErSSjJLJesWJcq", stop: ƒ, ready: ƒ}
let allUsersD = Meteor.users.find({}).fetch(); //Array(0)
return(
<div>
<form className="new_message" onSubmit={this.handleSubmit.bind(this)}>
<input type='text' ref="textInput" placeholder="message to send"/>
<button onClick={this.handleSubmit.bind(this)}>send</button>
</form>
</div>
)
}
}
import { Meteor } from 'meteor/meteor';
Meteor.startup(() => {
Meteor.publish('allUsers', function(){
return Meteor.users.find({},{
fields:{
_id:1,
username:1
}
});
});
});