Pour un plugin que j'utilise, je dois avoir un état qui ressemble à ceci:
getInitialState() {
return {
invalid: true,
access: {
access_code: '',
zipcode: '',
password: '',
confirm: '',
hospital_id: '',
},
}
},
Comment définir l'état de hospital_id sans définir le reste de l'accès?
Cela semble supprimer tout sauf hospital_id:
this.setState({access: {hospital_id: 1}})
Vous pouvez utiliser Object.assign ou la proposition de répartition d'objet pour créer des copies d'objets avec des propriétés mises à jour.
this.setState({
access: {
...this.state.access,
hospital_id: 1,
},
});
this.setState({
access: Object.assign({}, this.state.access, {
hospital_id: 1,
}),
});
Ou pour la version la plus courte et la mise à jour atomique:
this.setState(({access}) => ({access: {
...access,
hospital_id: 1,
}});
Et une option de plus est l'addon de mises à jour:
var update = require('react-addons-update');
this.setState({
access: update(this.state.access, {
hospital_id: {$set: 1},
})
});
J'utiliserais le premier.
let newAccess = Object.assign({}, this.state.access);
newAccess.hospital_id = 1;
this.setState({access: newAccess});
Ma façon préférée de le faire maintenant est aussi simple que:
let newAccess = this.state.access;
newAccess.hospital_id = 1;
setState({access: newAccess});
Un peu plus simple que la réponse actuellement acceptée.
[~ # ~] modifier [~ # ~] (basé sur la question de @SILENT)
Il semble que ce soit une méthode potentiellement dangereuse. Pour en savoir plus ici Réagissez: Un (très bref) discours sur l'immuabilité.
Il semble qu'une meilleure façon de procéder serait:
let newAccess = Object.assign({}, this.state.access, {hospital_id:1});
this.setState({access: newAccess});
Une autre façon de procéder serait de
const newAccess = {...this.state.access};
newAccess.hospital_id = 1;
setState({access: newAccess});
L'utilisation de opérateur d'étalement crée un clone de this.state.access
.