答案 0 :(得分:3)
我知道已经有几个答案,但我相信他们未能解决OP特定的问题为什么它不起作用,特别是考虑到新的ES6语法。
tl; dr:带有块体的ES6箭头函数不会隐含返回。
箭头功能可以有一个简洁的身体"或通常的"阻止身体"。
在简洁的正文中,只需要一个表达式,并附加一个隐式返回。在块体中,必须使用显式返回语句。
这是"简洁的身体"的示例,使用filter
原型:
let myArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let filteredArray = myArray.filter(item => item > 5);
console.log(filteredArray);
// => [6, 7, 8, 9, 10]
在此表达式中,缺少括号{
}
意味着它将隐式返回表达式的结果。
"块体"相当于:
let myArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let filteredArray = myArray.filter(item => {
return item > 5;
});
console.log(filteredArray);
// => [6, 7, 8, 9, 10]
在你的帖子中,你是在块体内指定你的组件而不返回它,并且因为地图原型要求你返回将用于新地图的回调中的项目,所以地图是空的。
答案 1 :(得分:1)
直接在地图
内的匿名函数中返回Component.map((d, i) => (<Component />))
或
.map((d, i) => <Component />)
答案 2 :(得分:0)
请参阅MDN docs:
map()方法创建一个新数组,其结果是在此数组中的每个元素上调用提供的函数。
如果提供的函数没有返回任何数据..你将有一个包含未定义对象的数组。
[1, 2, 3].map(function(){}) // [undefined, undefined, undefined]
答案 3 :(得分:0)
正如Bikas Vaibhav在他的评论和释义Mozilla Docs中所说:map按顺序为数组中的每个元素调用一次提供的回调函数,并从结果中构造一个新数组。
因此,如果你没有返回任何内容,你将得到一个与 ballArray 相同长度的数组,只有undefined而不是返回值。在浏览器控制台中尝试这两个示例。
返回:
> b = [1,4,9];
> d = b.map(function(a){
var rt = a*2;
return rt
});
<- [2, 8, 18]
不退货:
// Without a return:
> d = b.map(function(a){
var rt = a*2;
});
<- [undefined, undefined, undefined]
希望这有帮助!
答案 4 :(得分:0)
使用ES6箭头功能,您可以执行隐式返回:
this.state.ballArray.map((d, i) => (
<Animated.View />
))