首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react本机TextInput onBlur在android上未被处罚

react本机TextInput onBlur在android上未被处罚
EN

Stack Overflow用户
提问于 2017-11-17 09:15:02
回答 4查看 4.1K关注 0票数 1

我的Reactive原生版本是0.38.0

代码语言:javascript
复制
<TextInput onBlur={ (event) =>
   this.handleBlurCheck(event.nativeEvent.text,params) } />

在函数handleBlurCheck中,我在iOS中得到了值,但在Android中得到了undefined

TextInput在安卓平台上变得模糊时,如何获得价值?

nativeEvent对象在iOS上:

代码语言:javascript
复制
nativeEvent:{
    eventCount: 5,
    target: 1046,
    text: '56'
}

安卓上的nativeEvent

代码语言:javascript
复制
nativeEvent:{
    target: 1046,
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-11-17 09:28:19

尝试使用onEndEditing,如

代码语言:javascript
复制
<TextInput onEndEditing={ (event) => this.handleBlurCheck(event.nativeEvent.text,params) } />

您可以查看已报告的问题这里

票数 6
EN

Stack Overflow用户

发布于 2017-11-17 09:27:15

我只是使用onChange来获得值。

代码语言:javascript
复制
  onChange={(event) => this.setState({
                         value: event.nativeEvent.text
                       })}

并触发模糊的功能

票数 0
EN

Stack Overflow用户

发布于 2017-11-17 14:41:06

关于这些论点的文档实际上是有限的:

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

不过,作为一次散步,你可以用

代码语言:javascript
复制
<TextInput
  onChangeText={(text) => this.setState({text})}
  onEndEditing={() => this.handleBlurCheck(this.state.text, params)}
/>

UPD.

另一个需要考虑的工作解决办法是:

代码语言:javascript
复制
<TextInput
  onEndEditing={(e) => this.handleBlurCheck(e.nativeEvent.text, params)}
/>

详细描述:

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

代码语言:javascript
复制
private WritableMap serializeEventData() {
  WritableMap eventData = Arguments.createMap();
  eventData.putInt("target", getViewTag());
  return eventData;
}

与iOS代码不同的是,所有内容都已就绪:RCTEventDispatcher.m

代码语言:javascript
复制
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;

然而,如果我们看一下"onEndEditing“事件:ReactTextInputEndEditingEvent.java

代码语言:javascript
复制
private WritableMap serializeEventData() {
  WritableMap eventData = Arguments.createMap();
  eventData.putInt("target", getViewTag());
  eventData.putString("text", mText);
  return eventData;
}

text属性设置在那里。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47346998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档