在React子组件中异步检索状态时遇到问题

时间:2017-11-01 15:21:52

标签: reactjs react-router state react-props

我在只有一个嵌套子项中从我的React应用程序状态检索和显示信息时遇到了一个非常有趣的问题。

我尝试做的与此react-router tutorial for recursive paths类似。我有一个管理员路线,它将用户带到用户可以编辑的嵌套部分。我成功地将道具传递给每个组件,将信息保存在应用程序的状态中,直到达到某一点。

我的网址是: / admin / label / posts / edit /:post

我的组件如下所示:



import React from 'react'
import { withRouter } from 'react-router-dom'

const EditingPost = props => {
  const index = props.match.params.post
  const post = props.posts[index]
  return(
    <div>
      {post.title}
    </div>
  )
}

export default withRouter(EditingPost)
&#13;
&#13;
&#13;

我的错误是:

TypeError: Cannot read property 'title' of undefined
EditingPost
src/pages/Admin/Label/EditingPost.js:9
   6 |   const post = props.posts[index]
   7 |   return(
   8 |     <div>
>  9 |       {post.title}
  10 |     </div>
  11 |   )
  12 | }

但是,当我 console.log(post)时,应用程序会抛出5个日志,前2个是 undefined ,接下来的3个包含我正确的信息。 ;我正在寻找。我认为在渲染组件的html之前我需要等到信息可用。然而,当我将日志扔进其他组件时,我注意到了相同的行为;多个日志,前一个或两个未定义,其余包含所需信息,然后正确加载所有组件。

我无法理解为什么我遇到这个特定组件的问题。我知道我需要的信息正在通过,但出于某种原因,我无法像平常那样使用它。

我已经把手指关闭了,尝试导入有用的图书馆,尝试使用承诺,尝试在此之前实现我所能做的一切。

任何帮助或建议表示赞赏!我希望这一切对某人有意义。

1 个答案:

答案 0 :(得分:0)

我会对您的功能进行以下更改:

const EditingPost = props => {
  const index = props.match.params.post
  const post = props.posts[index];
  const title = post ? post.title : '';
  return(
    <div>
      {title}
    </div>
  )
}