首页 > 解决方案 > Meteor React:初始页面加载时未定义用户对象

问题描述

在个人资料页面上,我想禁止未登录的用户访问该页面。但是,Meteor.user() 对象在初始页面加载时未定义。应该如何等到 Meteor.user() 对象被定义。什么时候可以确定用户没有登录并且 Meteor.user() 被加载?

这是伴随着 WithTracker 方法的我的 Profile 渲染方法的一部分。如您所见,当 Meteor.user() 不可用时,会呈现一个 Redirect 对象。

render() {
  const {user} = this.props

  console.log(user) //First undefined, later defined. But already renders redirect, so it's not useful

  return (
    <Container fluid className='p-3 mb-5'>
      {/* Not logged in */}
      {!user && <Redirect
        to={{
        pathname: '/SignUp',
        state: {
          location: '/Profile'
        }
      }}/>}
      {/* Logged in */}
      ...
    </Container>
  )
}


export default withTracker(() => {
  return {
    user: Meteor.user()
  }
})(Profile)

标签: javascriptreactjsmeteor

解决方案


 return (
   { undefined === user ? <Container fluid className='p-3 mb-5'>
      {/* Not logged in */}
      {!user && <Redirect
        to={{
        pathname: '/SignUp',
        state: {
          location: '/Profile'
        }
      }}/>}
      {/* Logged in */}
      ...
    </Container> : 'loading'}
  )

您可以尝试在用户是时使用?:运行容器内的内容,并在用户是时undefined显示加载指示器defined


推荐阅读