首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onPress参数不变

onPress参数不变
EN

Stack Overflow用户
提问于 2018-09-20 14:44:54
回答 2查看 233关注 0票数 0

我想显示一个项目列表,当我单击每个项目时,它会提醒我它的值。

代码语言:javascript
复制
_onPressButton(i) { 
    Alert.alert('You tapped the button number ' + i)
}

_renderBlockLebel = (number) => {
    var items = [];
    for (var i=0; i < number; i++) { 
        items.push(
            <TouchableOpacity onPress={() => this._onPressButton(i)} key={i}>
                <View style={styles.boxItem}>
                    <Text>Level {i}</Text>
                </View>
            </TouchableOpacity>
        );
    }
    return items;
}

render(){
    return(
        <View style={styles.box}>{this._renderBlockLebel(18)}</View>
    );
}

我有18个项目,它显示很好,但当我点击任何项目,它提醒“您点击按钮编号18",我传递的值是不变的。

我的密码怎么了?我是新来的反应本地人。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-20 14:52:13

当您按标签时,i的值已达到number (这是您的情况下的18 )。您需要在每次迭代中保留i的值。将_onPressButton声明更改为

代码语言:javascript
复制
_onPressButton = (i) => () => { 
    Alert.alert('You tapped the button number ' + i)
}

还将onPress处理程序更改为

代码语言:javascript
复制
<TouchableOpacity onPress={this._onPressButton(i)} key={i}>

看一看闭锁

希望这能帮上忙!

票数 2
EN

Stack Overflow用户

发布于 2018-09-20 15:05:46

我试着考虑一个变量,它起作用了。

代码语言:javascript
复制
import * as React from 'react';
import { Alert, TouchableOpacity, Text, View, StyleSheet } from 'react-native';
import { Constants } from 'expo';

export default class App extends React.Component {
  _onPressButton (n) {
    Alert.alert('You tapped the button number ' + n);
  }

  _renderBlockLebel = number => {
    var items = [];
    for (var i = 0; i < number; i++) {
      const n = i;
      items.push(
        <TouchableOpacity onPress={() => this._onPressButton(n)} key={i}>
          <View style={styles.boxItem}>
            <Text>Level {i}</Text>
          </View>
        </TouchableOpacity>
      );
    }
    return items;
  };

  render() {
    return (
      <View style={styles.container}>
        <View style={styles.box}>{this._renderBlockLebel(18)}</View>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
    paddingTop: Constants.statusBarHeight,
    backgroundColor: '#ecf0f1',
  },
});

https://snack.expo.io/@gasparteixeira/alert-number

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52427802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档