Ma version native de réaction est la 0.38.0
<TextInput onBlur={ (event) =>
this.handleBlurCheck(event.nativeEvent.text,params) } />
Dans la fonction handleBlurCheck
, j'obtiens la valeur sur iOS, mais j'obtiens undefined
sur Android.
Comment obtenir de la valeur lorsque TextInput
est flou sur la plate-forme Android?
L'objet nativeEvent
sur iOS:
nativeEvent:{
eventCount: 5,
target: 1046,
text: '56'
}
Le nativeEvent
sur Android:
nativeEvent:{
target: 1046,
}
4 réponses
Essayez avec onEndEditing , comme
<TextInput onEndEditing={ (event) => this.handleBlurCheck(event.nativeEvent.text,params) } />
Vous pouvez consulter le problème signalé ici
La documentation sur les arguments est vraiment limitée:
https://facebook.github.io/react-native/releases/0.38/docs/textinput.html
Bien que comme une promenade, on puisse utiliser
<TextInput
onChangeText={(text) => this.setState({text})}
onEndEditing={() => this.handleBlurCheck(this.state.text, params)}
/>
UPD.
Une autre solution de travail à envisager serait:
<TextInput
onEndEditing={(e) => this.handleBlurCheck(e.nativeEvent.text, params)}
/>
Description détaillée:
En regardant le code source, il est évident que ce que vous obtenez est exactement ce qui est envoyé: ReactTextInputBlurEvent.java
private WritableMap serializeEventData() {
WritableMap eventData = Arguments.createMap();
eventData.putInt("target", getViewTag());
return eventData;
}
Contrairement au code iOS qui a tout en place: RCTEvent.Dispatcher
NSMutableDictionary *body = [[NSMutableDictionary alloc] initWithDictionary:@{
@"eventCount": @(eventCount),
@"target": reactTag
}];
if (text) {
body[@"text"] = text;
}
if (key) {
if (key.length == 0) {
key = @"Backspace"; // backspace
} else {
switch ([key characterAtIndex:0]) {
case '\t':
key = @"Tab";
break;
case '\n':
key = @"Enter";
default:
break;
}
}
body[@"key"] = key;
Cependant, si nous regardons l'événement "onEndEditing": ReactTextInputEndEditingEvent.java
private WritableMap serializeEventData() {
WritableMap eventData = Arguments.createMap();
eventData.putInt("target", getViewTag());
eventData.putString("text", mText);
return eventData;
}
La propriété text
y est définie.
Sur la fonction de flou a ce genre de paramètres.
onBlur = (event, newValue, previousValue) =>{ }
Dans ios, la valeur modifiée est donnée par
nouvelle valeur
Paramètre mais dans Android il est donné par
previousValue
Vous pouvez donc utiliser cette logique pour obtenir la valeur du texte.
import {isUndefined} from 'lodash';
onBlur = (event, nv, pv) =>{
const value = isUndefined(nv)? pv:nv;
// use value to as the text field value
}
J'utilise simplement onChange pour obtenir la valeur.
onChange={(event) => this.setState({
value: event.nativeEvent.text
})}
Et déclenchez les fonctions sur le flou
Questions connexes
De nouvelles questions
reactjs
React est une bibliothèque JavaScript pour la création d'interfaces utilisateur. Il utilise un paradigme déclaratif basé sur les composants et vise à être à la fois efficace et flexible.