reactjs - React Native TouchableOpacity OnPress 不使用循环

标签 reactjs typescript react-native ecmascript-6

我有一个 ScrollView ,其中多个项目是通过循环生成的。我在这些项目上方添加了 TouchableOpacity,因为我希望这些对象可以触摸。但是当我在 onPress 方法上添加一个方法时,它显示错误 not a function , is undefined

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 的值(value),因为你没有使用箭头功能。如果您将 .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

关于reactjs - React Native TouchableOpacity OnPress 不使用循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54783159/

相关文章:

javascript - 如何在react组件中使用现有的javascript代码

javascript - 如何使用 enzyme 对React中的选择元素是否具有焦点进行单元测试?

javascript - Yeoman 生成器添加新文件生成现有项目

react-native - React Redux 的 useSelector 不更新 expo react-native 上的商店状态

reactjs - 具有未渲染的动态标签名称的 React 组件

javascript - Firebase 存储 : download images to and put to img src in React map

angular - 读取路由参数?

angular 5 和 quilljs [Parchment] 无法创建印迹

reactjs - React-redux 组件不会在存储状态更改时重新渲染

listview - react native ListView : Wrong row removed when deleting