Maison > interface Web > js tutoriel > le corps du texte

Comment éviter l'« erreur de transition d'entrée non contrôlée à entrée contrôlée » dans ReactJS ?

Patricia Arquette
Libérer: 2024-10-25 14:05:30
original
789 Les gens l'ont consulté

How to Avoid the

Erreur de transition d'entrée non contrôlée à entrée contrôlée dans ReactJS

React met en garde contre la commutation entre des éléments d'entrée non contrôlés et contrôlés. Cette erreur se produit généralement lorsqu'un champ de saisie accepte initialement la saisie de l'utilisateur librement (non contrôlée), puis que le développeur tente ultérieurement de contrôler sa valeur via l'état (contrôlé).

Extrait de code :

L'erreur est illustrée par le code suivant :

<code class="javascript">constructor(props) {
  super(props);
  this.state = {
    fields: {},
    errors: {}
  }
}

onChange(field, e){
  let fields = this.state.fields;
  fields[field] = e.target.value;
  this.setState({fields});
}

render() {
  return(
    <div className="form-group">
      <input
        value={this.state.fields["name"]}
        onChange={this.onChange.bind(this, "name")}
        className="form-control"
        type="text"
        refs="name"
        placeholder="Name *"
      />
    </div>
  )
}</code>
Copier après la connexion

Cause première :

Dans ce code, le problème réside dans l'état initial où les champs sont initialisé comme un objet vide. Lors du premier rendu du composant, this.state.fields.name n'est pas défini, ce qui fait de l'entrée un composant non contrôlé. Cependant, lorsque l'utilisateur saisit une valeur, les champs sont mis à jour, ce qui rend la saisie contrôlée.

Solutions possibles :

Pour résoudre cette erreur, il existe deux options :

  1. Initialiser les champs avec une valeur par défaut :

    Définir les champs à l'état initial avec une valeur par défaut :

    <code class="javascript">this.state = {
      fields: {name: ''}
    }</code>
    Copier après la connexion
  2. Utiliser l'évaluation de court-circuit :

    Utiliser l'évaluation de court-circuit dans l'attribut value pour fournir une valeur par défaut lorsque this.state.fields.name n'est pas défini :

    <code class="javascript"><input value={this.state.fields.name || ''} /></code>
    Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!