react-native:组件不在.map中呈现

时间:2016-12-08 12:24:05

标签: javascript reactjs react-native ecmascript-6

这里的东西似乎不对。它不会在不使用Animated.View的情况下呈现return,而我在许多示例中看​​到了这项工作。有没有猜到这种行为的原因?

enter image description here

5 个答案:

答案 0 :(得分:3)

我知道已经有几个答案,但我相信他们未能解决OP特定的问题为什么它不起作用,特别是考虑到新的ES6语法。

tl; dr:带有块体的ES6箭头函数不会隐含返回。

From the docs:

  

箭头功能可以有一个简洁的身体"或通常的"阻止身体"。

     

在简洁的正文中,只需要一个表达式,并附加一个隐式返回。在块体中,必须使用显式返回语句。

这是"简洁的身体"的示例,使用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 />
))