【问题标题】:Best practice accessing document object in ReactJS在 ReactJS 中访问文档对象的最佳实践
【发布时间】:2018-02-26 15:47:15
【问题描述】:

在使用像 React 这样的框架时直接访问文档对象是不好的做法。

我正在使用外部条形码扫描仪,我想检测何时扫描数字并填充特定字段。我想避免跟踪焦点所在的字段。

这是我的代码

 render(){
    ....
    document.onkeypress = (e) => {
      e = e || window.event;
      const digit = e.key;
      if(e.target.nodeName === 'BODY' && digit.match(/[0-9]/i)){
        console.log(digit);
      }
    };

【问题讨论】:

  • 我个人不建议在使用像 React 或 Vue 等 SPA 时向文档或窗口添加事件侦听器......也就是说 - React 文档确实提供了一些信息 - 也许你在哪里放置你的听众'是一个更重要的问题,而不是你的render方法等react-cn.github.io/react/tips/dom-event-listeners.html
  • 我感觉到X/Y problem here。为什么你的组件中需要document 上的keypress 处理程序?

标签: javascript reactjs barcode-scanner


【解决方案1】:

document.onkeypress 无论你是否使用 React,都可能是不好的做法。相反,document.addEventListener("keypress", ...)(并确保只执行一次。)

另外,在render 中连接事件处理程序肯定不是最佳实践。 如果您出于某种原因需要将处理程序连接到document,您可以在componentDidMount 中执行此操作(然后在componentWillUnmount 中删除它)。

【讨论】:

  • 需要检测按键的原因是条形码扫描仪充当 HID 键盘。该应用程序计划用于各种信息亭。我想限制鼠标的使用并避免让用户选择一个字段来填充条形码。我将尝试移至 componentDidMount
猜你喜欢
  • 2012-07-31
  • 2017-12-13
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
  • 2020-04-04
  • 2012-05-12
相关资源
最近更新 更多