99 votes

Violation d'invariant : Les chaînes de texte doivent être rendues dans un composant <Text>.

J'ai fait la mise à jour de la RN 0.54 à 0.57 et mon application s'est pratiquement effondrée à cause de l'utilisation des éléments React Native.

J'ai utilisé leur fonctionnalité d'erreur sur TextInput qui permettent essentiellement d'activer des accessoires permettant de styliser le message d'erreur et de définir votre message d'erreur. Très pratique, mais la mise à jour a cassé ces composants et je suis maintenant accueilli par cette erreur :

Invariant Violation: Text strings must be rendered within a <Text> Component.

J'ai donc supprimé ce code et l'erreur disparaît, mais le problème persiste lorsque j'exécute ce code :

{ this.state.event.cards[i].fields[j].error && 

  <Text style={{ color: '#e74c3c', fontSize: 14, paddingLeft: 5 }}>
    {this.state.event.cards[i].fields[j].error}
  </Text>
}

Lorsque je commence à taper dans un champ de saisie de texte, le message d'erreur prend la forme d'une chaîne vide. Ainsi, si une erreur est renvoyée, le fait de taper dans le champ fera disparaître l'erreur.

Dès que this.state.event.cards[i].fields[j].error devient une chaîne de caractères, je reçois cette erreur. Cependant, vous pouvez voir que je vérifie si l'erreur existe, puis j'affiche simplement l'erreur, ou du moins j'essaie.

Une autre paire d'yeux serait reconnaissante sur ce point.

0 votes

Assurez-vous que votre JSX est exempt d'erreurs et que vous n'avez pas ajouté accidentellement du texte inattendu.

4voto

ZenBoat Points 488

Pour moi, c'est arrivé à cause d'une accolade non ouverte dans le JSX.

<View>
        {events.map(event => {
          return (
            <Card title={event.summary}>
              <Text>Date: {event.start.dateTime}</Text>
            </Card>
          );
        })}
        } <------------ that was the culprit
</View>

3voto

Melih Mucuk Points 636

Cela se produit généralement lorsque vous effectuez un rendu conditionnel en ligne. Vous devez supprimer les espaces blancs entre Text et votre condition comme ci-dessous.

{ this.state.event.cards[i].fields[j].error && <Text style={{ color: '#e74c3c', fontSize: 14, paddingLeft: 5 }}>
    {this.state.event.cards[i].fields[j].error}
  </Text>
}

0 votes

J'ai tout écrit sur une seule ligne, sans espace, car j'ai lu que les espaces pouvaient causer ce problème. Après l'avoir modifié en fonction de votre réponse, j'ai toujours été accueilli par la réponse, malheureusement dans ce cas, cela n'a pas fonctionné. //edit : J'ai espacé le texte pour qu'il soit plus lisible, je m'excuse pour la confusion.

0 votes

Je l'ai mis sur un Gist pour vous.

0 votes

Je n'ai rien remarqué d'anormal. Quel est votre error valeur du champ ?

3voto

Sarthak Sharma Points 25

Dans mon cas, cette erreur est due à la présence du point-virgule ';' à la fin de la fermeture de la balise Texte. Pour tous ceux qui n'ont pas obtenu la réponse appropriée ci-dessus, essayez ceci. En supprimant le point-virgule, l'erreur a disparu.

3voto

silverTech Points 41

D'après les autres réponses données ici, ce message d'erreur est vague et s'affiche pour diverses raisons. Je l'ai eu en écrivant des commentaires ou même des petits espaces blancs dans les vues (c'est fou, oui...).

par exemple : <View> {props.children} </View>

doit être changé en : <View>{props.children}</View>

1voto

hksande Points 11

J'ai rencontré le même message d'erreur dans VSCode alors que je n'avais pas de /* Commentaires */ ou d'expressions. La solution était de supprimer le formatage dans quelque chose comme textedit ou word et de copier/coller le code dans vscode.

Je ne sais pas pourquoi ni comment cela fonctionne (peut-être cela se produit-il spécifiquement dans VSCode), mais le problème de formatage est quelque chose que j'ai également connu avec SDL dans graphql...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X