1
votes

TouchableWithoutFeedback génère une erreur de rendu

Je développe une application React Native à des fins d'apprentissage. Maintenant, j'utilise le composant TouchableWithoutFeedback pour répondre à l'interaction de l'utilisateur. Mais j'obtiens une erreur.

Voici mon code:

Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined.

Lorsque je clique sur la vue, j'obtiens cette erreur.

class Events extends React.Component {
  static navigationOptions = {
    title: "Events"
  };

  constructor(props) {
    super(props);
    this.state = {
      data: [
        {
          id: 1,
          name: "Name 1",
          image_url: "https://www.vkguy.co.uk/images/slideshow/05.jpg"
        },
        {
          id: 2,
          name: "Name 2",
          image_url: "https://www.vkguy.co.uk/images/slideshow/05.jpg"
        },
        {
          id: 3,
          name: "Name 3",
          image_url: "https://www.vkguy.co.uk/images/slideshow/05.jpg"
        }
      ]
    };
  }

  _handleLoadMore() {}

  renderItem(item) {
    return (
      <TouchableWithoutFeedback onPress={() => {
        
      }}>
        <View>
        <Card>
          <CardItem cardBody>
            <Image
              source={{ uri: item.image_url }}
              style={{ height: 200, width: null, flex: 1 }}
            />
          </CardItem>
          <CardItem>
            <Left>
              <Button transparent>
                <Icon active name="thumbs-up" />
                <Text>12 Likes</Text>
              </Button>
            </Left>
            <Body>
              <Button transparent>
                <Icon active name="chatbubbles" />
                <Text>4 Comments</Text>
              </Button>
            </Body>
            <Right>
              <Text>11h ago</Text>
            </Right>
          </CardItem>
        </Card>
        </View>
      </TouchableWithoutFeedback>
    );
  }

  render() {
    return (
      <View style={{ flex: 1, width: "100%" }}>
        <FlatList
          data={this.state.data}
          keyExtractor={item => item.id.toString()}
          renderItem={({ item }) => this.renderItem(item)}
          onEndReached={this._handleLoadMore}
        />
      </View>
    );
  }
}

export default Events;

 entrez la description de l'image ici

Quel est le problème avec mon code et comment puis-je le corriger?


3 commentaires

github.com/facebook/react-native/issues/16332


Votre fonction renderItem est-elle liée? Impossible de voir cela dans le code fourni. Essayez de lier la fonction en ajoutant this.renderItem = this.renderItem.bind (this) dans votre constructeur. Ou convertissez simplement la fonction en une fonction de grosse flèche () => {} .


Salut, Nishant, j'ai ajouté la liaison dans le constructeur. Mais ne fonctionne toujours pas.


3 Réponses :


0
votes

Pour commencer, essayez peut-être d'ouvrir le fichier App.js et de modifier cette ligne class YourApp étend le composant { dans exporter la classe par défaut YourApp étend le composant <{}> {


3 commentaires

De plus, vous avez peut-être accidentellement importé une image de native-base au lieu de l'importer de react-native (c'est une erreur courante)


Non, ce n'est pas le problème. Si j'ai supprimé le composant TouchableWithoutFeedback, tout fonctionne comme prévu.


peut-être devriez-vous remplir la fonction «onPress» avec quelque chose - comme juste et alerte?



0
votes

Sans pouvoir voir vos importations, c'est difficile à dire. Si vous êtes sûr d'exporter vos composants, cela a probablement à voir avec les exportations nommées ou par défaut, ou en oubliant d'exporter l'un de vos composants. Vérifiez si vous utilisez une exportation par défaut ...

exporter le composant Exemple par défaut

votre importation n'inclut pas de crochets et ressemble à

import ExampleComponent from '../../folder/file'

Sinon, si vous utilisez des exportations nommées comme ça ...

export const ExampleComponent = () => {

votre importation comprend des crochets

importer {ExampleComponent} depuis '../../folder/file'

Pourrait vous aider davantage si vous fournissez tous les composants impliqués, y compris les importations


0 commentaires

1
votes

Je ne sais pas si vous avez encore résolu ce problème, mais j'ai juste eu le même problème.

C'était une solution facile à une erreur plutôt stupide.

import React, { Component } from "react";
import { View, TouchableWithoutFeedback } from "react-native";

aurait dû être

import React, { Component, TouchableWithoutFeedback } from "react";
import { View } from "react-native";


0 commentaires