如何在React Native中收听键盘输入

时间:2018-03-09 18:11:17

标签: reactjs react-native keyboard-events

我有一台霍尼韦尔扫描仪,可在扫描条形码时输出文字。 我可以将它用作文本输入的“键盘”,这非常方便,因为我不需要接口任何东西。 但它有一个缺点,即必须集中输入,从而显示移动设备的虚拟键盘,这对我正在进行的项目来说是不可接受的。

有没有办法在不需要聚焦输入的情况下扫描值?我相信听取keyPress事件或其类似事件的方法,将输入的值存储在textInput以外的变量中。

如果有更好的方法来实现这一点,我全都听见了!

2 个答案:

答案 0 :(得分:2)

我知道react-native有一个键盘模块来控制keyboard events

  

键盘模块允许您侦听本机事件并对其作出反应,以及对键盘进行更改,例如解除它。

import React, { Component } from 'react';
import { Keyboard, TextInput } from 'react-native';

class Example extends Component {
  componentWillMount () {
    this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this._keyboardDidShow);
    this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this._keyboardDidHide);
  }

  componentWillUnmount () {
    this.keyboardDidShowListener.remove();
    this.keyboardDidHideListener.remove();
  }

  _keyboardDidShow () {
    alert('Keyboard Shown');
  }

  _keyboardDidHide () {
    alert('Keyboard Hidden');
  }

  render() {
    return (
      <TextInput
        onSubmitEditing={Keyboard.dismiss}
      />
    );
  }
}

答案 1 :(得分:2)

好的,大家,找到了一种方法来做到这一点,而不会太疯狂。 它不是最优雅的解决方案,但它完全符合我的需要,并且不会为代码添加太多。

import { Keyboard, TextInput } from 'react-native';

...

<TextInput
  autoFocus
  onFocus={() => Keyboard.dismiss()} />

此处的游戏名称为autoFocusonFocus={() => Keyboard.dismiss()} />

现在我按照@MattAft的建议使用https://www.npmjs.com/package/react-native-keyevent来监听按键(不幸的是这个包不会给我实际的扫描仪输入。但是,它会触发keyDown事件)来聚焦扫描仪读取内容时的TextInput。

<强>更新 几天前,当我们有时间重构这个组件时,一位同事对此有所帮助,我们发现在react-native-keyevent包中有一个名为onKeyMultipleListener的监听器,它不仅可以监听多个同时按键,但也捕获整个输入,这正是我们在这里所需要的。