【问题标题】:React.map defined but says undefinedReact.map 已定义但未定义
【发布时间】:2018-02-01 20:59:26
【问题描述】:

更新:

顺便说一句,我已经定义了带有响应的数据 setState({ fetchedData: responseJSON.data })

我只是在 setState 中获取名为 fetchedData: [] 的响应数据@我正在获取这些数据

{
"data":{
    "title": "The Basics - Networking",
    "description": "Your app fetched this from a remote endpoint!",
        "movies": [
          { "id": "1", "movieTitle": "Star Wars", …},
          { "id": "2", "movieTitle": "Back to the Future", …}
          { "id": "3", "movieTitle": "The Matrix", …}
          { "id": "4", "movieTitle": "Inception", …},
          { "id": "5", "movieTitle": "Interstellar", …}
        ]
   }
}

另外,如果我为 this.state.fetchedData.movies 进行控制台日志,我会收到回复

[
          { "id": "1", "movieTitle": "Star Wars", …},
          { "id": "2", "movieTitle": "Back to the Future", …}
          { "id": "3", "movieTitle": "The Matrix", …}
          { "id": "4", "movieTitle": "Inception", …},
          { "id": "5", "movieTitle": "Interstellar", …}
]

我已经尝试使用地图它不起作用这是我的代码

const allNews = this.state.fetchedData.movies.map((data) =>
  <ul>
      <li key={data.id}>{data.total}</li>
  </ul>
);

我收到错误消息:无法读取未定义的属性“地图”

然后我做了一个大的研究,我应该使用 object.key 这是我的代码:

const getData = this.state.fetchedData.map((items, index) => {
    return (
        <ul key={index}>
            {Object.keys(items.movies).map((movie) => {
                return (
                    <li key={movie.id}>{key.movieTitle}</li>
                )
            })}
        </ul>
    )
});

我收到错误提示

this.state.fetchedData.map 不是函数

我真的不知道我的问题出在哪里,即使我控制台记录数据我得到了正确的响应

谢谢你们帮助我

【问题讨论】:

  • 问题在于您调用地图的方式。根据上面的问题,this.state.fetchedData.map 不是函数,因为this.state.fetchedData 是一个对象,map 只能在数组上运行。
  • 是的,这就是为什么我尝试使用 Object.keys 将其转换为对象,然后我使用 map 将其转换为数组,但我收到错误消息说我无法隐藏 this.state.fetchedData跨度>
  • 当你 console.log 时,this.state.fetchedData.movies[0] 会提供什么?
  • @illiteratewriter 我已尝试console.log(this.state.fetchData.movies[0]); 我收到错误无法读取属性'0' of underfined
  • 试试this.state.fetchedData.movies[0]

标签: javascript reactjs


【解决方案1】:

您没有正确遍历您的状态,这将解决您的问题。

const allNews = this.state.fetchedData.data.movies.map((data) =>
  <ul>
      <li key={data.id}>{data.total}</li>
  </ul>
);

【讨论】:

  • 我收到错误提示无法读取未定义的属性“电影”
  • 顺便说一句,我已经用setState({ fetchedData: responseJSON.data })中的响应定义了数据
  • 如果我只是将电影放入地图中。正如我上面所说,如果我做了this.state.fetchData.movies.map 我收到一个错误,说无法读取未定义的属性“地图”
【解决方案2】:

打印this.state.fetchedData.movies 时如何得到{ movies: [ ... ] }?按照this.state.fetchedData 的形状,您应该只获得movies 中的数组,但会获得一个内部包含movies 键的对象。

你试过this.state.fetchedData.movies.movies.map吗? this.state.fetchedData.movies 怎么不只是电影数组?如果它是一个对象,你不能在它上面调用map

你什么时候打电话给setState({ fetchedData: responseJSON.data })?何时调用this.state.fetchedData.movies.map?您如何确定在初始渲染中使用fetchedData 设置了状态?

【讨论】:

  • 是的,你说得对,我上面的问题有一个错误,我得到的只是一个数组。我在另一个文件中调用 fetch 函数,我正在使用 promise,然后我在我正在做的成功响应中使用 componentWillMount 在我的组件中导入它 this.setState
  • 所以在设置状态之前仍然在调用render方法,所以fetchedData中没有任何内容。你应该在渲染之前检查一下。
猜你喜欢
  • 2015-04-18
  • 2018-07-19
  • 2018-11-09
  • 2014-10-14
  • 2018-08-06
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
相关资源
最近更新 更多