Je travaille sur un composant qui comprend plusieurs sous-composants qui peuvent être sélectionnés (ou 'activés', comme l'indique le nom ici). J'ai un tableau d'ID qui doit être initialisé avec tous les identifiants étant sélectionnés, donc this.state.activeSensors
se réfère à la liste totale des capteurs: this.props.mainViewSensors
. Les fonctions sensorSelect
obtiennent l'ID, et devraient par ce moyen être en mesure de déterminer si elle est sélectionnée ou non. Mon approche a été de vérifier si elle est dans la liste activeSensors - Retirez-la si elle est là, ajoutez-la si elle ne l'est pas. Définissez le nouvel état.Réagir setState met à jour les accessoires
Lorsque je supprime un élément de la nouvelle liste newActiveSensors
et que j'appelle setState, l'élément cliqué disparaît également des accessoires. Je ne savais pas que c'était possible. Est-ce quelque chose que j'ai mal fait?
Voici ce que je faisais:
const propTypes = {
mainViewSensors: PropTypes.arrayOf(PropTypes.string),
};
const defaultProps = {
mainViewSensors: [
'21EL',
'05LO',
'08HT',
'81EL',
'05TF',
],
}
class Multiselect extends React.Component {
constructor(props) {
super(props);
this.sensorSelect = this.sensorSelect.bind(this);
this.state = {
activeSensors: this.props.mainViewSensors,
selectedSensors: this.props.mainViewSensors,
};
}
sensorSelect(sensor) {
const newActiveSensors = this.state.activeSensors;
if (newActiveSensors.includes(sensor)) {
const index = newActiveSensors.indexOf(sensor);
newActiveSensors.splice(index, 1);
} else {
newActiveSensors.push(sensor);
}
this.setState({
activeSensors: newActiveSensors,
});
}
render() {
const { selectedSensors, activeSensors } = this.state;
return (
<div className="wrapper">
{this.state.selectedSensors.map((tag) => (
<div key={tag} role="button" className="main-gauge-holder" onClick={this.sensorSelect(tag)}>
<MainGauge tag={tag} />
</div>
))}
</div>
);
}
}
Multiselect.propTypes = propTypes;
Multiselect.defaultProps = defaultProps;
React.render(<Multiselect />, document.getElementById('container'));
Juste pour préciser, je fais quelque chose comme ça, où le spectacle de flèche verte que l'on est sélectionné (ici j'ai changé manuellement l'état actif dans composant enfant):
Oh mon dieu, cela a fonctionné comme un charme! Je pensais que le const au début de la fonction a fait une copie, et je n'y ai pas pensé plus car toute mon attention est allée au changement des accessoires .. Merci beaucoup! –