React Native touchable Onpress无法使用循环



我有一个scrollview,其中包含循环生成多个项目。我在这些项目上方添加了可触摸性,因为我希望这些对象可触摸。但是,当我在OnPress方法上添加一种方法时,它显示错误不是函数,是未定义的

list_data组件:

class List_Data extends React.Component {
    fetchData = () => {
        console.log("DONE");
    }
    _renderView = () => {
        return (
            <View style={{flex:1, padding: 20}}>
                        <View style={styles.container}>
                            <ScrollView horizontal={true} showsHorizontalScrollIndicator={false} >
                                {
                                    this.state.Data.map(function (data, index) {
                                        return (
                                            <TouchableOpacity key={index} onPress={() => this.fetchData()}>
                                                <Image source={{uri: data.imageSrc}}
                                                       resizeMode={'cover'}
                                                       style={{width: '100%', height: imageHeight}}
                                                />
                                            </TouchableOpacity>
                                        );
                                    })
                                }
                            </ScrollView>
                        </View>
                    </View>
        )
    }

    render() {
        return (
            {this._renderView()}
        );
    }
}

我不知道问题是什么,它只是一种在控制台上打印的方法。

问题来自您的.map。基本上,由于您不使用箭头功能,因此您正在失去this的值。如果将.map(function(data, index)更改为.map((data,index) =>,则应该有效。

import * as React from 'react';
import { Text, View, StyleSheet, ScrollView, TouchableOpacity, Image } from 'react-native';
import { Constants } from 'expo';
export default class App extends React.Component {
  state = {
    Data: [
      {imageSrc :'https://randomuser.me/api/portraits/men/39.jpg'},
      {imageSrc: 'https://randomuser.me/api/portraits/women/38.jpg'},
      {imageSrc: 'https://randomuser.me/api/portraits/men/37.jpg'},
      {imageSrc: 'https://randomuser.me/api/portraits/women/36.jpg'},
      {imageSrc: 'https://randomuser.me/api/portraits/men/35.jpg'},
      {imageSrc: 'https://randomuser.me/api/portraits/women/34.jpg'},
    ]
  }
  // let's pass something so that we know that it is working
  fetchData = (index) => {
    alert(`you pressed ${index}`)
  }
  _renderView = () => {
    return (
      <View style={{flex: 1, padding: 20}}>
        <View style={styles.container}>
        <ScrollView horizontal={true} showsHorizontalScrollIndicator={false} >
            {
              this.state.Data.map((data, index) =>  { // change this to an arrow function
                  return (
                      <TouchableOpacity key={index} onPress={() => this.fetchData(index)}> 
                          <Image source={{uri: data.imageSrc}} 
                                  resizeMode={'cover'}
                                  style={{width: 100, height: 100}}
                          />
                      </TouchableOpacity>
                  );
              })
            }
          </ScrollView>
        </View>
      </View>
    );
  }
  render() {
    return (
      this._renderView()
    );
  }
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    paddingTop: Constants.statusBarHeight,
    backgroundColor: '#ecf0f1',
    padding: 8,
  }
});

您可以看到它在以下小吃中工作https://snack.expo.io/@andypandy/map-with-arrow-function

在scrollview下尝试键盘shouldpersistTaps = {true}。<ScrollView keyboardShouldPersistTaps={true}>

相关内容

  • 没有找到相关文章

最新更新