0
votes

Erreur de réaction: impossible de lire les «utilisateurs» de propriété non définis

J'essaie d'exécuter ce code (capté de la source) où les entrées sont créées de manière dynamique et des valeurs sont enregistrées sur Soumettre. Je reçois cette erreur:

ne peut pas lire les «utilisateurs» de propriété non définis tout en appelant CreateUI. P> BlockQuote>

Quelqu'un peut-il m'aider ici, s'il vous plaît? p>

import React, { useState } from "react";
import ReactDOM from "react-dom";

export default function App() {
  const [state, setState] = useState({
    users: [{ firstName: "", lastName: "" }]
  });

  const addClick = () => {
    setState(prevState => {
      users: [...prevState.users, { firstName: "", lastName: "" }];
    });
  };
  const createUI = () => {
    state.users.map((el, i) => {
      return (
        <div key={i}>
          <input
            placeholder="First Name"
            name="firstName"
            value={el.firstName || ""}
            onChange={handleChange}
          />
          <input
            placeholder="Last Name"
            name="lastName"
            value={el.lastName || ""}
            onChange={handleChange}
          />
          <input type="button" value="remove" onClick={removeClick} />
        </div>
      );
    });
  };

  const handleChange = (i, e) => {
    const { name, value } = e.target;
    let users = [...state.users];
    users[i] = { ...users[i], [name]: value };
    setState({ users });
  };

  const removeClick = i => {
    let users = [...state.users];
    users.splice(i, 1);
    setState({ users });
  };

  const handleSubmit = event => {
    alert("A name was submitted: " + JSON.stringify(this.state.users));
    event.preventDefault();
  };
  return (
    <form onSubmit={handleSubmit}>
      {createUI()}
      <input type="button" value="add more" onClick={addClick()} />
      <input type="submit" value="Submit" />
    </form>
  );
}

ReactDOM.render(<App />, document.getElementById("root"));

// const rootElement = document.getElementById("root");
// ReactDOM.render(<App />, rootElement)


3 commentaires

1) onclick = {addClick ()} devrait être onclick = {addclick} . 2) Vous devez envelopper l'objet avec () dans addClick . 3) Vous devez RETURN STATEUR.USERS.MAP à partir de CategUI Fonction


4) Changer onchange à: onchange = {e => handlechange (i, e)} sinon, vous obtenez l'événement comme premier argument non l'index


Merci @Adiga et merci beaucoup tout le monde pour votre aimable aide.


4 Réponses :


2
votes

La raison de cette erreur est la ligne suivante: xxx

techniquement, vous appelez la fonction addClick qui modifie la valeur de votre état objet. La solution qui fonctionne bien est la suivante: xxx

ou plus court: xxx

J'espère que cela aide!


3 commentaires

Juste onclick = {addclick} devrait être bien


Il y a deux autres erreurs. Comme op ne redevient pas de CateUi fonction. Ils n'ont pas () wrapper autour de l'objet dans addClick


Merci, cela aide mais il semble que mon interface utilisateur soit gâché maintenant. En cliquant sur "Ajouter plus", tout est parti. C'est un écran vide que j'attendais au moins une paire de boîtes d'entrée pour être présents initialement et que la suite peut en ajouter plus avec un bouton "Ajouter plus". Sur Soumettre devrait afficher ces valeurs avec une alerte.



1
votes

En plus de la réponse de @ Norbial qui devrait être la réponse acceptée: votre fonction addClick code> est incorrecte. Votre appel code> SetState code> ne renvoie rien, ce qui signifie que dès que vous cliquez sur le bouton Ajouter, il se cassera à nouveau.

Modifier à ceci: P>

const addClick = () => {
  setState(prevState => ({
    users: [...prevState.users, { firstName: "", lastName: "" }]
  }));
};


0 commentaires

1
votes

Erreur 1:

Si vous retournez un objet sans déclaration de retour, il doit être enveloppé dans un support

const addclick = () => { State (prevstate => ({ Utilisateurs: [... prevstate.utilisateurs, {prénom: "", lastname: ""}]; })); };

Erreur 2:

Déclaration de retour manquante,

const CreateUI = () => { Remettre l'état.Users.map ((el, i) => { revenir (

); }); };

Erreur 3:

onclick doit avoir une fonction, mais vous définissez une valeur renvoyée à partir de addClick qui est non défini

... ...


1 commentaires

Merci, il corrige de nombreux problèmes ici, mais je ne suis toujours pas capable de taper des valeurs dans les cases de saisie



1
votes

Il y avait 3 problèmes avec votre code,

  1. Vous avez exécuté votre gestionnaire ONCLICK, AddClick qui a déclenché une boucle inifinite li>
  2. Méthode CreateUI n'a pas renvoyé la gamme de composants créés li>
  3. Syntaxe de la fonction de Fonction AddClick n'était pas correcte. LI> ol>

    p>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
    
    <div id="root"></div>


4 commentaires

NE PAS en mesure d'entrer des valeurs dans les cases d'entrée avec les modifications que vous avez publiées. Pouvez-vous s'il vous plaît jeter un oeil.


@Saurabhsingh: Vérifiez que la saisie du code fonctionnent maintenant dans l'extrait ci-dessus.


Merci, cela fonctionne avec les changements d'ONCHANGE maintenant.


@Saurabhsingh Un autre fyi: Vous devez également modifier onclick = {e => removeclick (i, e)} sinon il supprimera le mauvais index