Jav*_*ake 4 javascript reactjs
我已经在React中实现了一个小测试应用程序来通过AJAX获取数据,但它没有按照意图工作,因此我得到以下错误:
Uncaught TypeError: Cannot read property 'map' of undefinedInline JSX script
Run Code Online (Sandbox Code Playgroud)
代码如下:
<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>
Run Code Online (Sandbox Code Playgroud)
回复来自/api/bodyparts/:
{
"bodyparts": [
{
"id": 1,
"name": "Face"
},
{
"id": 3,
"name": "Mouth"
},
{
"id": 2,
"name": "Nose"
}
]
}
Run Code Online (Sandbox Code Playgroud)
因此,初始渲染this.state.bodyparts是undefined你得到的错误.
你应该回来
{bodyparts:[]}
Run Code Online (Sandbox Code Playgroud)
来自getInitialState.
同样在你的success回调中你应该设置如下状态:
this.setState(data);
Run Code Online (Sandbox Code Playgroud)
因为你的api已经bodyparts作为结果的一部分返回了.
| 归档时间: |
|
| 查看次数: |
24442 次 |
| 最近记录: |