Javascript 在Meteor React客户端中显示所有用户
我在让所有注册用户显示在客户端时遇到一些问题<代码>std:accounts ui软件包包含在Javascript 在Meteor React客户端中显示所有用户,javascript,node.js,reactjs,meteor,meteor-react,Javascript,Node.js,Reactjs,Meteor,Meteor React,我在让所有注册用户显示在客户端时遇到一些问题std:accounts ui软件包包含在.meteor/packages中自动发布程序包已被删除 所有用户的数据以alluser的形式发布在users.js中,而客户端则从react meteor data提供的alluser中订阅createContainer发布 但是,该页面仅显示当前登录用户的详细信息。在浏览器JS控制台中运行Meteor.users().find().fetch(),仅显示当前登录的用户,如果用户未登录,则不显示任何内容 在服
.meteor/packages
中<代码>自动发布程序包已被删除
所有用户的数据以alluser
的形式发布在users.js
中,而客户端则从react meteor data
提供的alluser
中订阅createContainer
发布
但是,该页面仅显示当前登录用户的详细信息。在浏览器JS控制台中运行Meteor.users().find().fetch()
,仅显示当前登录的用户,如果用户未登录,则不显示任何内容
在服务器端运行console.log(Meteor.users.find().fetch()
可以正确输出所有用户
为什么浏览器上会出现这种情况
/imports/api/Users.js
import { Meteor } from 'meteor/meteor';
if (Meteor.isServer) {
Meteor.publish('allUsers', function() {
return Meteor.users.find({});
})
}
/imports/ui/App.jsx
import React, { Component, PropTypes } from 'react';
import { createContainer } from 'meteor/react-meteor-data';
import { Accounts } from 'meteor/std:accounts-ui';
import { Table } from 'react-bootstrap';
import User from './User';
export class App extends Component {
renderUsers() {
return this.props.users.map((user) => (
<User key={user._id} user={user} />
));
}
render() {
return (
<div>
<h1>Users</h1>
<Table>
<tbody>
<tr>
<td>ID</td>
<td>Email</td>
<td>createdAt</td>
</tr>
{ this.renderUsers() }
</tbody>
</Table>
</div>
)
}
}
App.propTypes = {
users: PropTypes.array.isRequired
}
export default createContainer(() => {
Meteor.subscribe('allUsers');
return {
users: Meteor.users.find().fetch()
}
}, App);
import React, { Component } from 'react';
export default class Users extends Component {
render() {
return (
<tr>
<td>{ this.props.user._id}</td>
<td>{ _.get(this.props, 'user.emails[0].address', 'UNKNOWN') }</td>
<td>{ this.props.user.createdAt }</td>
</tr>
)
}
}
import React,{Component,PropTypes}来自'React';
从“meteor/react meteor数据”导入{createContainer};
从“meteor/std:Accounts ui”导入{Accounts};
从'react bootstrap'导入{Table};
从“./User”导入用户;
导出类应用程序扩展组件{
渲染器(){
返回此.props.users.map((用户)=>(
));
}
render(){
返回(
使用者
身份证件
电子邮件
创建数据
{this.renderUsers()}
)
}
}
App.propTypes={
用户:PropTypes.array.isRequired
}
导出默认createContainer(()=>{
Meteor.订阅(“诱惑者”);
返回{
用户:Meteor.users.find().fetch()
}
},App);
/imports/ui/User.jsx
import React, { Component, PropTypes } from 'react';
import { createContainer } from 'meteor/react-meteor-data';
import { Accounts } from 'meteor/std:accounts-ui';
import { Table } from 'react-bootstrap';
import User from './User';
export class App extends Component {
renderUsers() {
return this.props.users.map((user) => (
<User key={user._id} user={user} />
));
}
render() {
return (
<div>
<h1>Users</h1>
<Table>
<tbody>
<tr>
<td>ID</td>
<td>Email</td>
<td>createdAt</td>
</tr>
{ this.renderUsers() }
</tbody>
</Table>
</div>
)
}
}
App.propTypes = {
users: PropTypes.array.isRequired
}
export default createContainer(() => {
Meteor.subscribe('allUsers');
return {
users: Meteor.users.find().fetch()
}
}, App);
import React, { Component } from 'react';
export default class Users extends Component {
render() {
return (
<tr>
<td>{ this.props.user._id}</td>
<td>{ _.get(this.props, 'user.emails[0].address', 'UNKNOWN') }</td>
<td>{ this.props.user.createdAt }</td>
</tr>
)
}
}
import React,{Component}来自'React';
导出默认类用户扩展组件{
render(){
返回(
{this.props.user.\u id}
{{.get(this.props,'user.emails[0].address,'UNKNOWN'))
{this.props.user.createdAt}
)
}
}
我在使用angular 2和meteor时遇到了同样的问题。我还尝试使用meteor.users.find({});
但这不是正确的使用方法。
要先使用它,您应该创建一个像这样的新集合
export const Users = MongoObservable.fromExisting(Meteor.users);<-- most important line
并通过订阅在您的文件中使用
MeteorObservable.subscribe('userData').subscribe(() => {
this.userlist=Users.find({});
});
我是在angular 2中做的。你可以在最后一个订阅部分使用react语法。Upvote使用复数“are”对于数据。@ffxsam,刚刚解决了问题。我从“/User”导入了
用户;
,但导出了用户
,而不是用户
。这不知怎么搞砸了发布订阅。终于解决了!!@Nyxynyx很高兴听到这个问题!:)@Nyxynyx很高兴听到你解决了你的问题:)。我想我的答案只适用于angular2 meteor。React可能有不同的发布方式。我已经在14.4从Meteor.angular2 Meteor官方教程创建用户集合中检查过了。你可以检查。对于angular,实际上必须创建一个集合。我想这对React也有用。不管怎样,我只是想help@AmitSuhag非常感谢你的帮助!!我试着从“流星/流星”中导入{Meteor,MongoObservable}和const Users=MongoObservable.fromExisting(Meteor.Users)代码>但出现错误未捕获类型错误:无法在浏览器控制台中读取未定义的
的属性“fromExisting”。我是否需要安装任何软件包才能访问MongoObservable
?比如说,或者说它现在已经内置在Meteor中了?你不必使用MongoObservable。在react meteor中,应该有一个从现有数据创建集合的方法。首先尝试使用export const Tasks=new Mongo.Collection(Meteor.users);我从未使用过react,所以无法准确地告诉您,但应该有办法。@Nyxynyx实际上meteor会自动为meteor.users创建一个用户集合,如果您看到mongodb。你只需要使用这个集合。为此,您可以使用new Mongo.collection(Meteor.users)创建一个新集合,该集合将是默认用户集合的副本;或者您可以直接订阅您的monogdb用户集合。