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.

1voto

Utilisez ce code donné ci-dessous si la valeur initiale est une chaîne vide. Ou une vérification conditionnelle avec la valeur initiale. Ici, je vérifie conditionnellement si l'erreur n'est pas vide, puis je montre l'erreur.

{this.state.error !== '' && (
    <Text>
      {this.state.error}
    </Text>
)}

1voto

za_ali33 Points 41

Pour moi, l'erreur était due au fait que j'ai initialisé l'objet state comme une chaîne vide.

const [category, setCategory] = useState("")

Si l'état doit être un objet, il doit être défini comme nul au départ.

const [category, setCategory] = useState(null)

Ils ont résolu le problème.

0voto

Naved Khan Points 75
 <React.Fragment>
      {this.props.title ? (
        <React.Fragment> 
          <Text>  true </Text>
        </React.Fragment>
        ):(             
           <React.Fragment> 
          <Text>  false </Text>
          <Text>  false </Text>
        </React.Fragment>

Vous devez emballer avec Voir ou React.Fragment et à l'intérieur, vous devez également envelopper l'élément if plusieurs fois.

0voto

Emad Deym Points 11

Essayez ceci :

<>
    <View>
    {this.state.error &&
      <Text>
        Error message: {this.state.error}
    </Text>
   </View>
</>

0voto

user12843746 Points 1
{this.state.password.length > 0 && <Text>}

Cela produira la même erreur, car il retourne undefined. Nous pouvons le rendre comme ceci -

{this.state.password.length > ? <Text> : null}

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