Comment puis-je configurer STATUS pour un tableau imbriqué?

Pour un plugin que j'utilise, j'ai un pour avoir un état qui ressemble à ceci:

getInitialState() { return { invalid: true, access: { access_code: '', zipcode: '', password: '', confirm: '', hospital_id: '', }, } }, 

Comment configurer 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}}) 

 let newAccess = Object.assign({}, this.state.access); newAccess.hospital_id = 1; this.setState({access: newAccess}); 

Vous pouvez utiliser Object.assign ou la proposition de propagation 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 autre option est le complément des mises à jour:

 var update = require('react-addons-update'); this.setState({ access: update(this.state.access, { hospital_id: {$set: 1}, }) }); 

J'utiliserais le premier.

Généralement, vous devez prendre une copie approfondie de l'objet en question, puis simplement modifier les nouvelles propriétés.

Il ne supprime cependant pas tout sauf le site hospitalier, il le remplace. Le réglage de l'état doit contenir l'état complet.

Donc, vous utilisez une extension pour cloner l'objet et modifier les propriétés, ou s'il ne fonctionne pas tellement, vous pouvez faire quelque chose comme ceci:

 this.setState({ invalid: state.invalid, access: { access_code: state.access.access_code, zipcode: state.access.zipcode, password: state.access.password, confirm: state.access.confirm, hospital_id: 1, } }); 

Ma façon préférée de faire cela maintenant est aussi simple que:

 let newAccess = this.state.access; newAccess.hospital_id = 1; setState({access: newAccess}); 

Légèrement plus simple que la réponse acceptée actuelle.