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,
}
0
Alvin 17 nov. 2017 à 12:15

4 réponses

Meilleure réponse

Essayez avec onEndEditing , comme

<TextInput onEndEditing={ (event) => this.handleBlurCheck(event.nativeEvent.text,params) } />

Vous pouvez consulter le problème signalé ici

3
Prasun 17 nov. 2017 à 09:28

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.

0
Tamil Selvan C 25 sept. 2018 à 12:31

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
}
0
Kolitha Warnakulasooriya 9 oct. 2018 à 05:43

J'utilise simplement onChange pour obtenir la valeur.

  onChange={(event) => this.setState({
                         value: event.nativeEvent.text
                       })}

Et déclenchez les fonctions sur le flou

0
Alvin 17 nov. 2017 à 09:27
47346998