【发布时间】:2016-05-05 02:03:54
【问题描述】:
我的 Meteor 应用中有一个使用 React 组件构建的用户个人资料页面。因为它使用 Meteor.user() 创建变量之一,所以每当我退出应用程序时都会收到错误消息(但前提是我之前曾在当前会话中访问过个人资料页面)。这对我来说确实有意义,因为没有当前用户,Meteor.user() 不再可用,所以它会出错并显示“无法读取未定义的'支持'”消息。
AccountList = React.createClass({
mixins: [ReactMeteorData],
getMeteorData(){
var user;
var supportingUserId = Meteor.user().support.supportingUserId;
supportingUserId ? user = Meteor.users.findOne({_id: supportingUserId}) : user = Meteor.user();
return {
accounts: Accounts.find({owner: user._id}).fetch()
}
}...
最初,我尝试更改上面的代码块以将有问题的代码包装在 if 语句中,如下所示:
AccountList = React.createClass({
mixins: [ReactMeteorData],
getMeteorData(){
var user;
if (Meteor.user()){
var supportingUserId = Meteor.user().support.supportingUserId;
supportingUserId ? user = Meteor.users.findOne({_id: supportingUserId}) : user = Meteor.user();
return {
accounts: Accounts.find({owner: user._id}).fetch()
}
}
else{
return {};
}
}...
但是我遇到了另一个错误:“无法读取未定义的属性'长度'”,这是由未定义的帐户引起的(由另一个需要“帐户”的渲染方法触发)。我最终采用了相同的方法并添加了一个额外的 if 语句,但遇到了另一个类似的错误。我的问题是是否有可能解决这个问题而不必将一半的应用程序包装在“if (Meteor.user())”语句中。或者是否有办法让应用程序在注销时记住加载的 React 组件?
【问题讨论】:
-
如果您使用的是路由器,您通常会拒绝非登录用户访问需要用户信息的路由。在反应中,您可能希望定义一个更高级别的类,如果有用户,则仅包含所有与用户相关的类,如果没有,则显示其他内容。您应该能够避免在每个课程中都必须对此进行防御。
-
我已经拒绝了未登录用户的路由访问——当用户注销时,他们会回到主屏幕,但如果他们之前访问过个人资料,他们仍然会收到错误消息页。更高级别的课程是什么意思?你有什么可以分享的例子吗?
标签: javascript meteor reactjs