J'ai le composant React MUI Switch qui change son état d'interface utilisateur sur le prop vérifié = {this.state.checked}
class Switch extends Component { state = { active : this.props.contData.statesValue.active, checked: false } render() { const { classes, theme } = this.props; return ( <MuiSwitch checked={this.state.checked}/> ) } }
Le commutateur s'attend à ce que le prop vérifié soit une chaîne, 'true'
| 'false'
.
J'essaie de définir l'accessoire vérifié en utilisant l'état actif: this.props.contData.statesValue.active
, cependant, ceci est reçu comme booléen 0 1 et lorsqu'il est passé dans les accessoires Switch comme checked = {this.state.active}
entraîne l'erreur
Type d'accessoire ayant échoué: Prop
coché
non valide fourni àSwitchBase
.
Ma question est donc la suivante: comment puis-je changer le prop actif entrant de 0 1 en une chaîne 'true'
| 'false'
avant le rendu du composant. Auparavant, j'aurais regardé vers la méthode componentWillReceiveProps, mais étant donné qu'elle est maintenant obsolète, tout pointeur sur la façon dont je peux y parvenir serait le bienvenu.
3 Réponses :
Si les accessoires sont des nombres entiers (0 ou 1), vous pouvez faire cette astuce (hack?):
render () { // [...] const checked = `${Boolean(this.props.contData.statesValue.active)`} // const checked = `${this.props.contData.statesValue.active}` // if it's true or false return ( <MuiSwitch checked={checked} /> ) }
Switch de MUI peut utiliser une chaîne ou un booléen pour le coché
prop, avec v1.0 +.
Dans ce cas, nous convertissons l'accessoire en booléen lors de l'initialisation de l'état, en utilisant la double négation !!
éprouvée et vraie: p >
class Switch extends Component { state = { active: !!this.props.contData.statesValue.active }; render() { return <MuiSwitch checked={this.state.active}/>; } }
Le Switch # checked
dans Material UI accepte également un booléen.
Si vous n'avez pas d'autres raisons de maintenir l'état coché
dans le composant, il suffit passez-le des accessoires au Switch
comme ceci:
class Switch extends Component { render() { return ( <MuiSwitch checked={this.props.contData.statesValue.active === 1}/> ) } }