【问题标题】:How do I listen to keyboard input in React Native如何在 React Native 中收听键盘输入
【发布时间】:2018-03-09 18:11:16
【问题描述】:

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

有没有什么方法可以在不集中输入的情况下扫描值?我相信侦听 keyPress 事件或类似事件将是可行的方法,将输入的值存储在 textInput 以外的其他地方的变量中。

如果有更好的方法来实现这一点,我会全力以赴!

【问题讨论】:

  • 你的组件里只有一个TextInput吗?如果是这样,您可以将setState 用于扫描中TextInputvalue 道具的任何状态,不是吗?
  • 试试这个包,如果它作为按键事件传递,那么它应该可以工作:npmjs.com/package/react-native-keyevent 注意:除非你弹出,否则这不会与 expo 一起工作。
  • 是的,我可以。但不幸的是,要将扫描的值输入到输入中,我必须将其聚焦。没有键盘出现就无法集中输入,这是万恶之源:/
  • 谢谢@MattAft!该回购的描述完全是我过去几个小时一直在谷歌搜索的内容。我会尝试一下,如果它有效,我将编辑 OP。再次感谢
  • @LucasBernardo np,希望它能工作......我们在大约 1 年前遇到了这个问题,我们的工作是将每个条形码扫描仪连接到通过套接字与应用程序通信的树莓派。 .但我怀疑你想做所有这些大声笑

标签: reactjs react-native keyboard-events


【解决方案1】:

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

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

...

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

这里的游戏名称是autoFocusonFocus={() =&gt; Keyboard.dismiss()} /&gt;

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

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

【讨论】:

  • 给其他人。 'react-native-keyevent' 不适用于 iOS。
  • 嗨@Lucas Bernardo!何时触发 onKeyMultipleListener 事件?只有 keyup 和 keydown 对我有用!
  • 嘿 @lucas-bernardo,在 RN 文档中它说 Keyboard.dismiss() 删除了对 TextInput 的关注。你如何保持对TextInput 组件的关注?你不需要有一个专注的TextInput 来监听关键事件吗?
  • 同样,我只能使用 react-native-keyevent 库跟踪 keyup 和 keydown。顺便说一句,我通过使用 keydown 实现了我想要的。我的流程是:扫描条形码 -> 库捕获键码输入 -> 将键码转换为字符 -> 对结果执行一些逻辑。
【解决方案2】:

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

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

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

【讨论】:

  • 感谢您的回答!是的,我知道。不幸的是,键盘监听器似乎只监听实际键盘组件的安装、卸载和尺寸变化。所以没有办法检查按键事件或任何我可以用来触发值更改监听器的东西
  • 嗯,是的,但它实际上只是一个文本输入。 (有没有办法将其格式化为代码 sn-p?) console.log('v: ', v))} />
猜你喜欢
  • 2011-02-10
  • 1970-01-01
  • 2019-06-30
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
相关资源
最近更新 更多