未捕获的类型错误:无法使用 React 读取未定义的属性“map”
2015-02-20
25980
我在 React 中实现了一个小测试应用程序来通过 AJAX 获取数据,但它没有按预期工作,因此我收到以下错误:
Uncaught TypeError: Cannot read property 'map' of undefinedInline JSX script
代码如下:
<div id="content"></div>
<script type="text/jsx">
var Bodypart = React.createClass({
render: function() {
return (
<div>
{this.props.name}
</div>
)
}
})
var BodypartList = React.createClass({
getInitialState: function() {
return {data: []};
},
componentWillMount: function() {
$.ajax({
url: this.props.url,
dataType: 'json',
success: function(data) {
this.setState({bodyparts: data});
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
render: function() {
var bodypartItems = this.state.bodyparts.map(function (bodypart) {
return (
<Bodypart
name={bodypart.name}
/>
);
});
return (
<div>
{bodypartItems}
</div>
);
}
});
React.render(
<BodypartList url="/api/bodyparts/" />,
document.getElementById('content')
);
</script>
来自
/api/bodyparts/
的响应:
{
"bodyparts": [
{
"id": 1,
"name": "Face"
},
{
"id": 3,
"name": "Mouth"
},
{
"id": 2,
"name": "Nose"
}
]
}
2个回答
在初始渲染时,
this.state.bodyparts
是
未定义
,因此出现错误。
您应该从
getInitialState
返回
{bodyparts:[]}
。
此外,在您的
成功
回调中,您应该设置如下状态:
this.setState(data);
因为您的 api 已经返回了
bodyparts
作为其结果的一部分。
nilgun
2015-02-20
this.state.bodyparts
未定义。组件在 ajax 完成之前进行渲染。尝试设置初始状态
Joe Fitter
2015-02-20