Je veux une liste d'entrées de texte qui sont en synchronisation avec une liste de valeurs que j'ai dans le backend. Donc, en tapant dans les mises à jour les valeurs, et les mises à jour des valeurs reflètent dans les entrées de texte.React - Entrée de texte de liaison bidirectionnelle avec un format différent entre stocké et affiché
Ceci est une situation de liaison 2 voies typique avec quelque chose comme ceci:
class BoundInput extends Component {
constructor(props) {
super(props);
this.state = {textVal: ''};
}
handleChange = evt => this.setState({textVal: evt.target.value});
render() {
return <input type="text"
value={this.state.textVal}
onChange={this.handleChange} />
}
}
Mais je voudrais stocker la valeur pas exactement ce que l'utilisateur a tapé, mais, par exemple, une conversion de cm.
Malheureusement, la conversion et la conversion ne sont pas parfaites.
E.g. taper '2.'
est immédiatement converti en '2'
, de sorte que vous êtes coincé si vous voulez taper une décimale et tout ce qui va au-delà.
Je voudrais être en mesure d'avoir la valeur stockée à jour l'affichage d'entrée à moins l'entrée est active, auquel cas il ne doit être mise à jour de la valeur stockée de l'entrée.
J'ai donc une valeur booléenne qui me permet de passer sous condition à value
à l'entrée de texte, de sorte que le typer peut entrer sans entrave, et l'affichage peut mettre à jour une représentation équivalente une seule fois qu'ils quittent mise au point (par exemple '1.'
devient soudainement '1'
ou '1.0'
), ce qui est bien.
J'ai essayé cela mais j'ai l'erreur qu'un composant d'entrée doit être contrôlé, ou non, pendant toute sa durée de vie. Pas de changement comme je l'ai fait.
Des suggestions sur la stratégie globale, ou contourner cet avertissement particulier sur contrôlé vs non contrôlé?
Peut-être un moyen de tuer et de re-monter le composant d'entrée avant de passer de passer value
à ne pas passer value
?
Quelque chose que j'ai fait qui est laid comme tout diable est juste de dupliquer mon composant d'entrée (que j'appelle NiceInput
), et quand il n'est pas actif, je permute le duplicata NiceInput2
. Cela fonctionne, mais il doit y avoir un moyen moins ridicule que de dupliquer des composants: D