【发布时间】:2017-05-04 03:06:06
【问题描述】:
我在让所有注册用户显示在客户端时遇到了一些问题。 std:accounts-ui 包包含在 .meteor/packages 中。 autopublish 包已被删除。
所有用户的数据都以allUsers 发布在Users.js 中,而客户端从createContainer 提供的createContainer 中订阅allUsers 发布。
但是页面只呈现当前登录用户的详细信息。在浏览器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);
/imports/ui/User.jsx
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>
)
}
}
【问题讨论】:
-
赞成使用复数“are”作为数据。
-
@ffxsam,刚刚解决了这个问题。我有
import User from './User';,但正在导出Users而不是User。这以某种方式搞砸了出版物订阅。终于解决了!! -
@Nyxynyx 很高兴听到! :)
-
@Nyxynyx 很高兴听到您解决了您的问题 :)。我认为我的答案仅适用于 angular2-meteor。 React 可能有不同的发布方式。我已经在 angular-meteor.com/tutorials/socially/angular2/… angular2-meteor 官方教程的 Meteor.users 的 14.4 Create Users 集合上检查了它。你可以检查。对于 Angular,您实际上必须创建一个集合。我虽然它也适用于 React。反正我只是想帮忙
-
@AmitSuhag 非常感谢您的帮助!!
标签: javascript node.js reactjs meteor meteor-react