ReactJS 不能使用 map() 显示对象属性
ReactJS cannot have object properties displayed using map()
这是我组件中的代码。我最终想做的是构建一个 select,选项是从
返回的朋友列表
/*** @jsx React.DOM */
var FriendSelect = React.createClass({
getInitialState: function(){
return {
friends: []
};
},
componentDidMount: function(){
this.loadFriends();
},
loadFriends: function (){
$.ajax({
async: true,
type: "GET",
url: "../../Messaging/_GetFriends",
success: function (data) {
this.setState({ friends: data });
console.log("data in ajax: ",data);
}.bind(this)
});
},
handleSelections: function (){
console.log('selection changed');
},
render: function(){
console.log('this.state.friends', this.state.friends);
return (
<div>
{this.state.friends.map(function(friend){
<span>{friend.text}</span>
})}
</div>
);
}
});
React.render(<FriendSelect />, document.getElementById('friendSelection'));
这是 ajax 调用后返回的 json。
[{"id":"8qdzmV","text":"fernando roman","firstName":"first","lastName":"last","pictureName":"00000000-0000-0000-0000-000000000000","pictureExt":".jpg"},{"id":"8qdzmV","text":"Anthony Macias","firstName":"first2","lastName":"last2","pictureName":"00000000-0000-0000-0000-000000000000","pictureExt":".jpg"},{"id":"8qdzmV","text":"Carla Velasco ","firstName":"first3","lastName":"last3","pictureName":"011ab238-0b3a-44ff-aeda-02e6fbdcca56","pictureExt":".jpg"}]
渲染组件时我没有收到任何错误,问题是每个朋友的文本 属性 没有被渲染。
你需要 return
里面 map
:
<div>
{this.state.friends.map(function(friend){
return <span>{friend.text}</span>
})}
</div>
JSX 没有输出的副作用 - 它只是评估一个可以返回的元素。
如果启用 es6 转译,您可以避免这种情况:
<div>{
this.state.friends.map(friend => <span>{friend.text}</span>)
}</div>
您可以使用 browserify/reactify 并修改您的 package.json:
"browserify": {
"transform": [
[
"reactify",
{
"es6": true
}
],
"envify"
]
},
这是我组件中的代码。我最终想做的是构建一个 select,选项是从
返回的朋友列表/*** @jsx React.DOM */
var FriendSelect = React.createClass({
getInitialState: function(){
return {
friends: []
};
},
componentDidMount: function(){
this.loadFriends();
},
loadFriends: function (){
$.ajax({
async: true,
type: "GET",
url: "../../Messaging/_GetFriends",
success: function (data) {
this.setState({ friends: data });
console.log("data in ajax: ",data);
}.bind(this)
});
},
handleSelections: function (){
console.log('selection changed');
},
render: function(){
console.log('this.state.friends', this.state.friends);
return (
<div>
{this.state.friends.map(function(friend){
<span>{friend.text}</span>
})}
</div>
);
}
});
React.render(<FriendSelect />, document.getElementById('friendSelection'));
这是 ajax 调用后返回的 json。
[{"id":"8qdzmV","text":"fernando roman","firstName":"first","lastName":"last","pictureName":"00000000-0000-0000-0000-000000000000","pictureExt":".jpg"},{"id":"8qdzmV","text":"Anthony Macias","firstName":"first2","lastName":"last2","pictureName":"00000000-0000-0000-0000-000000000000","pictureExt":".jpg"},{"id":"8qdzmV","text":"Carla Velasco ","firstName":"first3","lastName":"last3","pictureName":"011ab238-0b3a-44ff-aeda-02e6fbdcca56","pictureExt":".jpg"}]
渲染组件时我没有收到任何错误,问题是每个朋友的文本 属性 没有被渲染。
你需要 return
里面 map
:
<div>
{this.state.friends.map(function(friend){
return <span>{friend.text}</span>
})}
</div>
JSX 没有输出的副作用 - 它只是评估一个可以返回的元素。
如果启用 es6 转译,您可以避免这种情况:
<div>{
this.state.friends.map(friend => <span>{friend.text}</span>)
}</div>
您可以使用 browserify/reactify 并修改您的 package.json:
"browserify": {
"transform": [
[
"reactify",
{
"es6": true
}
],
"envify"
]
},