反应原生TextInput onBlur在android上获取未定义

时间:2017-11-17 09:15:02

标签: reactjs react-native

我的本​​机版本为0.38.0

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

在功能handleBlurCheck中,我在iOS上获得了值,但我在Android上获得了undefined

如果在Android平台上模糊TextInput时如何获取价值?

iOS上的nativeEvent对象:

nativeEvent:{
    eventCount: 5,
    target: 1046,
    text: '56'
}

Android上的nativeEvent

nativeEvent:{
    target: 1046,
}

4 个答案:

答案 0 :(得分:1)

尝试 onEndEditing ,例如

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

您可以查看报告的问题Appium-iOS-Inspector

答案 1 :(得分:0)

我只是使用onChange来获取值。

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

并触发模糊功能

答案 2 :(得分:0)

关于参数的文档非常有限:

https://facebook.github.io/react-native/releases/0.38/docs/textinput.html

虽然散步可以使用

<TextInput
  onChangeText={(text) => this.setState({text})}
  onEndEditing={() => this.handleBlurCheck(this.state.text, params)}
/>

<强> UPD。

另一个需要考虑的工作解决方案是:

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

详细说明:

查看源代码很明显,你得到的就是发送的内容: ReactTextInputBlurEvent.java

private WritableMap serializeEventData() {
  WritableMap eventData = Arguments.createMap();
  eventData.putInt("target", getViewTag());
  return eventData;
}

与拥有所有内容的iOS代码不同: RCTEventDispatcher.m

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;

但是,如果我们看一下&#34; onEndEditing&#34;事件: ReactTextInputEndEditingEvent.java

private WritableMap serializeEventData() {
  WritableMap eventData = Arguments.createMap();
  eventData.putInt("target", getViewTag());
  eventData.putString("text", mText);
  return eventData;
}

text属性设置在那里。

答案 3 :(得分:0)

模糊功能具有此类参数。

onBlur = (event, newValue, previousValue) =>{ }

在ios中,

更改后的值由

给出
  

newValue

参数,但在android中由

给出
  

previousValue

因此您可以使用此逻辑获取文本值。

import {isUndefined} from 'lodash';

onBlur = (event, nv, pv) =>{ 
  const value = isUndefined(nv)? pv:nv;
  // use value to as the text field value
}