我试图在触摸时从动态生成的元素列表中选择一个元素。我正在使用for循环生成列表。在每个元素中,我添加一个事件监听器,并将导航堆栈推送到另一个屏幕。这非常好用。然而,与此同时,我尝试将状态更新为所选元素。因为我只想在用户按下view/按钮后更新状态,所以我在事件侦听器中调用函数。问题是,状态总是更新到for循环的最后一个索引,并且我无法访问每个元素的索引。有人能帮我吗?
const ListRecommendations = [];
for (var i = 0; i < this.Data.length; i++) {
ListRecommendations.push(
<View key={i}
style={styles.Recommendation}
onStartShouldSetResponder={() => {
Navigation.push(this.props.componentId, {
component: {
name: 'secondScreen',
}
});
this.setState(i);
}}
>
<ImageBackground
source= {{uri: this.Data[i].FilePath}}
style={styles.backgroundImage}
>
<Text style={styles.Title}>{this.Data[i].Title}</Text>
</ImageBackground>
</View>
)
}
您在循环中使用var
,但您应该知道var
声明不适用于块范围,并且i
将等于最后一个值
要修复它,请使用let
for(let I=0; I < 10; I++){
// ...
}
请阅读更多https://javascript.info/variables