react-native - TouchableHighlight - onPress - 传递参数 - 如果我传递迭代器var它每次都是最高的数字

Kur*_*t57 2 iteration react-native touchablehighlight

我怎样才能传递成功和可传递的id.

for(var i = 0; i < datasource.length;i++){

var currentIndex = i;
this.viewCollection.push(

<TouchableHighlight onPress={() => this.handleItemTouch(currentIndex)} >

</TouchableHighlight>

 );
}

  handleItemTouch(i) {
  //i is every time equal to datasource.length
Run Code Online (Sandbox Code Playgroud)

//基于"我"我想在某处滚动}

我想要做的是,基于哪个触摸高亮灯按下滚动视图基于"i"参数滚动到ax坐标

Mat*_*Aft 9

由于您使用的是var,因此currentIndex变量不是块作用域.

例如,第一次迭代将设置currentIndex为1,因此如果您单击touchablehighlight ...它将是正确的索引,但是对于每次迭代后它将更新currentIndex所有可触摸的高亮度.

这就是为什么currentIndex将始终是您单击的任何一个数据源的长度.您可以通过使用let或者使用像forEach/map这样具有不同执行上下文的迭代器来解决此问题.

for (let i = 0; i < datasource.length; i++){

this.viewCollection.push(

<TouchableHighlight onPress={() => this.handleItemTouch(i)} >

</TouchableHighlight>

 );
}
Run Code Online (Sandbox Code Playgroud)


Emi*_*uez 5

您可以使用Function.prototype.bind这些事项。例如

<TouchableHighlight onPress={this.handleItemTouch.bind(this, currentIndex)} ></TouchableHighlight>
Run Code Online (Sandbox Code Playgroud)

然后在您的handleItemTouch上:

handleItemTouch(index) {
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)