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;
Quel est le problème avec mon code et comment puis-je le corriger?
3 Réponses :
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 <{}> {
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?
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
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";
github.com/facebook/react-native/issues/16332
Votre fonction
renderItemest-elle liée? Impossible de voir cela dans le code fourni. Essayez de lier la fonction en ajoutantthis.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.