【问题标题】:Meteor React: User Object undefined at initial page loadMeteor React:初始页面加载时未定义用户对象
【发布时间】:2018-04-25 06:15:45
【问题描述】:

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

这是我的 Profile 渲染方法的一部分,附带 WithTracker 方法。如您所见,当 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)

【问题讨论】:

    标签: javascript reactjs meteor


    【解决方案1】:
     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 时显示加载指示器。

    【讨论】:

    • 谢谢@Omar。我将代码放在更高阶的组件中,因此我不必在每个组件中重复它。
    • @Colin。问题是 !user 即使用户没有登录也会触发重定向。那是因为 !user 在初始页面加载时总是会返回 true。但是,如果您检查 user === undefined,您将知道它已加载。
    • 为什么user 在页面加载时总是正确的?
    猜你喜欢
    • 2022-01-06
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多