ReactJS:this.props.data.map 不是函数

Posted

技术标签:

【中文标题】ReactJS:this.props.data.map 不是函数【英文标题】:ReactJS: this.props.data.map is not a function 【发布时间】:2016-05-26 23:33:53 【问题描述】:

我正在尝试从 .json 文件中获取数据并通过视图显示结果。下面是 scoreboard.json 文件。


"subject":"scoreboard",
"copyright":"Copyright 2015",
"data":
   "games":
     "next_day_date":"2015-07-22",
     "modified_date":"2015-08-04T07:34:50Z",
     "month":"07",
     "year":"2015",
     "game":[
        
           "game_type":"R",
           "double_header_sw":"N",
           "location":"Some City, State",
        , 
        
           "game_type":"R",
           "double_header_sw":"N",
           "location":"Another City, Another State"
        
     ]
   

我只想要“数据”字段而不是“主题”或“版权”字段,并且能够通过下面的 ajax 请求来实现。

	getInitialState: function() 
		return data: [];
	,
	componentDidMount: function() 
		$.ajax(
		  url: this.props.url,
		  dataType: 'json',
		  cache: false,
		  success: function(data) 
		  	console.log(data.data);
		    this.setState(data: data.data);
		  .bind(this),
		  error: function(xhr, status, err) 
		    console.error(this.props.url, status, err.toString());
		  .bind(this)
		);
	,

我将状态传递给接收文件,但是当我尝试调用它时,我收到了TypeError: this.props.data.map is not a function

	render: function() 
		var gameDate = this.props.data.map(function(data) 
			return (
				<h1>data.modified_date </h1>
			);
		);

我希望最终能够获得 scoreboard.json 的“数据”字段中的所有信息(即 data.games.game[] 数组)。 .map 函数似乎也不适用于此。

如何在 .map 函数中获取“数据”字段(更具体地说是 modified_date)?

编辑:我可以通过调用 data.games.modified_date 记录 modified_date 但是,当尝试设置数据状态时:this.state.data = data.games.game 我收到一个新警告:Each child in an array or iterator should have a unique "key" prop. Check the render method of "GameDate"

【问题讨论】:

data 不是数组而是对象。 data.games 也是一个对象。如果你只想要日期,你会说data.games.modified_date。没有要映射的数组。 我认为您应该复制并粘贴更多的 json 文件。您发布的文件有一些语法错误并且没有显示多个游戏,就像您的问题可能暗示的那样。 感谢 azium,我已经编辑了 json 文件以包含另一个游戏。就像您发布的一样,我也找到了 games.modified_date,谢谢! 我明白了.. 所以gamegames 中的一个数组。所以你可以做data.games.game.map(game =&gt; &lt;div&gt; game.game_type &lt;/div&gt;)。每个游戏都没有自己的修改日期。 感谢 azium 这行得通,但是,我收到了这个警告:Each child in an array or iterator should have a unique "key" prop. Check the render method of "GameDate" 编辑:刚刚在我的视图中添加了一个“key”属性,这修复了警告。 【参考方案1】:

正如 azium 所指出的,我的数据是一个 object 而不是 array 就像我的结果所期望的那样。

为了在“games”字段中获取“game”数组,我将状态设置如下:

this.setState(data: data.data.games.game);

为了获取其他字段,我只是创建了一个新状态并通过一个 prop 传递它,即 modified_date:

this.state.date = data.data.games.modified_date

警告:Each child in an array or iterator should have a unique "key" prop. 已通过在 .map 方法中添加“key”属性得到修复:

render: function() 
    var gameDate = this.props.data.map(function(data) 
        return (
            <h1 key=data.location >data.location </h1>
        );
    );

【讨论】:

以上是关于ReactJS:this.props.data.map 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

Reactjs - 如何在 reactjs 材料表中加载和映射数据

ReactJS学习笔记-深入理解ReactJS的面向组件即对象

ReactJS学习笔记-深入理解ReactJS的面向组件即对象

源码ReactJS-AdminLTE:原始AdminLTE仪表板的ReactJS版本

ReactJs入门

设置 ReactJs 时出错