Nyx*_*nyx 5 javascript node.js meteor reactjs meteor-react
我在使客户端显示所有注册用户时遇到一些麻烦.std:accounts-ui包装包括在内.meteor/packages.autopublish包已被删除.
所有用户的数据都以Users.jsas的形式发布allUsers,而客户端allUsers则从createContainer提供的内部订阅该发布react-meteor-data.
但是,该页面仅呈现当前登录用户的详细信息.Meteor.users().find().fetch()在浏览器中运行JS控制台仅显示当前登录的用户,如果用户未登录则不显示任何内容.
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({});
})
}
Run Code Online (Sandbox Code Playgroud)
/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);
Run Code Online (Sandbox Code Playgroud)
/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>
)
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用 Angular 2 和 Meteor 时,我也遇到了同样的问题。我还尝试使用访问数据Meteor.users.find({});
但这不是正确的使用方法。要首先使用它,您应该创建一个像这样的新集合
export const Users = MongoObservable.fromExisting(Meteor.users);<-- most important line
Run Code Online (Sandbox Code Playgroud)
然后在
Meteor.publish("userData", function() {
if (Roles.userIsInRole(this.userId, 'admin')) {
return Meteor.users.find();
} else {
const selector = {
'_id': this.userId
};
return Meteor.users.find(selector);
}
});
Run Code Online (Sandbox Code Playgroud)
并通过订阅在您的文件中使用。
MeteorObservable.subscribe('userData').subscribe(() => {
this.userlist=Users.find({});
});
Run Code Online (Sandbox Code Playgroud)
我是在 Angular 2 中完成的。请在最后订阅部分使用 React 语法。
| 归档时间: |
|
| 查看次数: |
623 次 |
| 最近记录: |