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

IT技术 reactjs react-native keyboard-events
2021-05-10 07:39:43

我有一个霍尼韦尔扫描仪,可以在扫描条形码时输出文本。我可以将它用作文本输入的“键盘”,这非常方便,因为我不必进行任何接口。但它的缺点是必须聚焦输入并因此显示移动设备的虚拟键盘,这对于我正在处理的项目来说是不可接受的。

有什么方法可以在无需聚焦输入的情况下获取扫描值?我相信侦听 keyPress 事件或类似事件将是可行的方法,将输入的值存储在 textInput 之外的其他变量中。

如果有更好的方法来实现这一点,我全神贯注!

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。

更新 几天前,当我们有时间重构这个组件时,一位同事帮了我一些忙,我们发现onKeyMultipleListener在 react-native-keyevent 包上有一个侦听器,它不仅侦听多个同时发生的 keyPresses,而且捕获整个输入,这正是我们在这里需要的。

我知道 react-native 有一个键盘module来控制键盘事件

键盘module允许您侦听本机事件并对它们做出react,以及对键盘进行更改,例如关闭它。

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}
      />
    );
  }
}