Comment utiliser setState pour mettre à jour state.item dans l'état ?
P粉464208937
2023-08-23 17:35:11
<p>Je crée une application dans laquelle les utilisateurs peuvent concevoir leurs propres formulaires. Par exemple. Spécifiez le nom du champ et les détails des autres colonnes qui doivent être incluses. </p>
<p>Ce composant est disponible en tant que JSFiddle. </p>
<p>Mon état initial ressemble à ceci : </p>
<pre class="brush:php;toolbar:false;">var DynamicForm = React.createClass({
getInitialState : fonction() {
var éléments = {} ;
items[1] = { nom : 'champ 1', populate_at : 'web_start',
identique_à : 'nom_client',
autocomplete_from : 'nom_client', titre : '' } ;
items[2] = { nom : 'champ 2', populate_at : 'web_end',
identique_à : 'nom_utilisateur',
autocomplete_from : 'nom_utilisateur', titre : '' } ;
retourner les articles };
},
rendu : fonction() {
var _this = ceci ;
retour (
<div>
{ Object.keys(this.state.items).map(function (clé) {
var item = _this.state.items[clé];
retour (
<div>
<PopulateAtCheckboxes this={this}
vérifié={item.populate_at} id={clé}
populate_at={data.populate_at} />
</div>
);
}, ce)}
<button onClick={this.newFieldEntry}>Créer un nouveau champ</button>
<button onClick={this.saveAndContinue}>Enregistrer et continuer</button>
</div>
);
}</pré>
<p>Je souhaite mettre à jour l'état lorsque l'utilisateur modifie une valeur, mais j'ai du mal à localiser l'objet correct : </p>
<pre class="brush:php;toolbar:false;">var PopulateAtCheckboxes = React.createClass({
handleChange : fonction (e) {
item = this.state.items[1];
item.name = 'nouveauNom';
articles[1] = article ;
this.setState({éléments : éléments});
},
rendu : fonction() {
var populateAtCheckbox = this.props.populate_at.map(function(value) {
retour (
<étiquette pour={valeur}>
<input type="radio" name={'populate_at'+this.props.id} value={value}
onChange={this.handleChange} vérifié={this.props.checked == valeur}
ref="populate-at"/>
{valeur}
</étiquette>
);
}, ce);
retour (
<div className="populate-at-checkboxes">
{populateAtCheckbox}
</div>
);
}
});</pré>
<p>Comment dois-je créer <code>this.setState</code> pour qu'il mette à jour <code>items[1].name</code> ? </p>
Vous pouvez utiliser l'assistant d'immuabilité
更新
pour y parvenir : p>Alternativement, si vous ne vous souciez pas de pouvoir détecter les modifications apportées à cela à l'aide des méthodes de cycle de vie
===
在shouldComponentUpdate()
, vous pouvez modifier l'état directement et forcer le rendu du composant - c'est en fait la même chose que la réponse de @limelights, car elle sort l'objet de l'état et le modifie.Modification ultérieure ajoutée :
Consultez les leçons de Simple Component Communication react-training pour un exemple de la façon de transmettre une fonction de rappel d'un composant parent en état de maintien à un composant enfant qui doit déclencher un changement d'état.
Voici comment procéder sans bibliothèques d'assistance :
Vous pouvez combiner les étapes 2 et 3 si besoin :
Ou vous pouvez tout faire en une seule ligne :
Remarque : j'ai créé
items
sous forme de tableau. OP a utilisé un objet. Cependant, le concept est le même.Vous pouvez voir ce qui se passe dans le terminal/console :