Dans mon application React-native, j'ai une API à partir de laquelle je récupère des données et je configure les données dans mes valeurs d'entrée, l'utilisateur devrait pouvoir modifier ces entrées et mettre à jour, mais lorsque j'essaie de taper dans l'entrée il ne tapera rien et la valeur reste telle quelle, voici le code TextInput:
<TextInput placeholder= Email value={this.state.info.email} onChangeText={email => this.setState({ email })}/>
4 Réponses :
Je pense que vous avez une erreur dans votre fonction de gestionnaire. Lorsque vous avez appelé setState, vous avez mis à jour this.state.email
mais dans votre valeur d'entrée de texte, vous avez utilisé this.state.info.email
, vous avez également écrit l'objet d'événement dans le email, au lieu de la nouvelle valeur du champ ( event.target.value
). Vous devriez utiliser quelque chose comme ça.
onChangeHandler = event => { const newEmail = event.target.value this.setState({ info: {email: newEmail})} } <TextInput placeholder= Email value={this.state.info.email} onChangeText={this.onChangeHandler.bind(this)} />
Vous devez d'abord déclarer l'état, puis l'appliquer à la valeur TextInput.
<TextInput placeholder= Email value={this.state.email} onChangeText={value=> this.setState({ email: value})}/>
et remplir TextInput pour la première fois avec la valeur API que vous devez ajouter
XXX
et votre TextInput sera comme ci-dessous:
componentDidMount(){ this.setState({email: this.props.info.email}); }
J'espère que cela fonctionne ..
onChangeText = {value => this.setState ({email: value})}
ici, vous obtiendrez une valeur incorrecte car l'objet événement est passé à la fonction de gestionnaire. Le code correct est event => this.setState ({email: event.target.value})
Comme je ne pense pas que l'e-mail soit le seul accessoire de votre state.info
, je vous recommande d'utiliser correctement setState ()
, afin de ne modifier que ce champ . Selon l'immuabilité et ES6, quelque chose comme:
<TextInput placeholder="Email" value={this.state.info.email} onChangeText={text => this.setState(state => ({ info: { ...state.info, email: text })) } />;
En savoir plus sur la gestion de TextInput
ici
J'avais le même problème jusqu'à ce que je change la value
prop en defaultValue
comme ceci:
<TextInput style={styles.inputBox} onChangeText={title => this.setState({ title })} defaultValue={this.state.title} placeholder='Title' />
J'ai trouvé cette information sur Documentation de React ici