gpt4 book ai didi

javascript - 在 Meteor React 客户端中显示所有用户

转载 作者:搜寻专家 更新时间:2023-10-31 22:49:34 25 4
gpt4 key购买 nike

我在让所有注册用户显示在客户端时遇到了一些问题。 std:accounts-ui 包包含在 .meteor/packages 中。 autopublish 包已被删除。

所有用户的数据都作为 allUsersUsers.js 中发布,而客户端从 中订阅 allUsers 发布>createContainerreact-meteor-data 提供。

但是该页面只呈现当前登录用户的详细信息。在浏览器 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>
)
}
}

最佳答案

我在使用 angular 2 和 meteor 时遇到了同样的问题。我还尝试使用 Meteor.users.find({});

访问数据

但这不是正确的使用方法。要首先使用它,您应该像这样创建一个新集合

export const Users = MongoObservable.fromExisting(Meteor.users);<-- most important line

然后在

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);
}
});

并通过订阅在您的文件中使用。

MeteorObservable.subscribe('userData').subscribe(() => { 
this.userlist=Users.find({});
});

我是在 Angular 2 中完成的。请在最后的订阅部分使用 React 语法。

关于javascript - 在 Meteor React 客户端中显示所有用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41216227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com