J'essaie d'avoir désactivé le champ de saisie sélectionné / activé pour les modifications. Jusqu'à présent, je l'ai fait pour tous les champs à la fois comme mais je veux éditer uniquement le champ sélectionné en fonction de l'identifiant d'élément. J'ai essayé de le changer pour gérer comme un Tous les conseils à ce sujet? P> p> événement.target.id code> mais qui ne fonctionnait pas du tout. P>
3 Réponses :
Vous pouvez stocker les états modifiables de chaque entrée dans un objet: exemple de travail: p>
Bien. Je pense que le code n'est pas valide. Je vais définir l'état au premier clic comme vide non ce qui a été fourni onclick code> alors l'état n'est pas mis à jour sur un autre onclick code> pour le même élément ID code>
@Jacktheknife j'ai oublié les supports carrés autour de ID code> dans greatinedit code>. Cela devrait fonctionner maintenant. Exemple de travail: codesandbox.io/s/exciting-nobel-b2k8p
Vous pouvez créer un composant qui encapsule l'état d'édition démo p> p> <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.0/umd/react-dom.production.min.js"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>
Cette solution est bonne lorsque la soumission de la forme est effectuée sur le bouton d'édition désactivée mais pas lors de la soumission entière (multiples formulaires) à la fois.
Par formulaire, vous voulez dire le
Ouais - J'ai plusieurs
J'ai proposé une solution de travail pour mon code basé sur la suggestion @trixn:
constructor(props) {
super(props);
this.state = { }
}
handleEdit(id) {
let setEdit = this.state[id];
this.setState( {[id]: !setEdit});
}
render(){
return(
<div className="col-md-3"><label>First Name</label></div>
<div className="col-md-6">
<input
type="text"
className="form-control react-form-input"
id="fname"
name="fname"
disabled={!this.state.fname}
/>
<i className="fas fa-edit" onClick = {() => this.handleEdit('fname')}></i>
</div>
</div>
<div className="col-md-3"><label>Last Name</label></div>
<div className="col-md-6">
<input
type="text"
className="form-control react-form-input"
id="lname"
name="lname"
disabled={!this.state.lname}
/>
<i className="fas fa-edit" onClick = {() => this.handleEdit('lname')}></i>
</div>
)}
La meilleure façon est de déplacer votre bouton d'entrée et d'édition dans un composant distinct qui aura un état distinct.
@demkovych J'y pensais au début, mais je regardais cela à la composante de niveau de forme plutôt que de seul champ sélectionné. J'ai été bloqué avec le composant parent car j'ai plusieurs formulaires à soumettre avec un seul bouton Soumettre uniquement