小编Bri*_*gus的帖子

React 和 Electron 与 Draft.js:“全局未定义”

这里提出了类似的问题:Uncaught ReferenceError: global is not Define at Object../node_modules/fbjs/lib/setImmediate.js

这个问题有两个答案,似乎都有信心能够解决它。对我来说,问题是——没有给出如何实现答案的解释。

基本上,我有一个包含 React 的电子应用程序,一切正常,直到我尝试将 Draft.js 实现到项目中。我收到以下错误:

app.js:19805 Uncaught ReferenceError: global is not defined
Run Code Online (Sandbox Code Playgroud)

该日志将我指向 babel/webpack 编译的 app.js 中的一行:

module.exports = global.setImmediate;
Run Code Online (Sandbox Code Playgroud)

导致它的具体原因被缩小到导入语句:

import {Editor, EditorState} from 'draft-js';
Run Code Online (Sandbox Code Playgroud)

上面链接问题的答案之一是在窗口上添加一个全局对象:

(window as any).global = window;
Run Code Online (Sandbox Code Playgroud)

我不明白的是……这是什么意思?在我的 main.js 文件中,我创建窗口(它只是整个应用程序的一个窗口),尝试执行此操作似乎无论我在哪里尝试执行此操作都会引发错误,而且我似乎找不到任何参考根本无法定义“全球”。我应该在哪里定义“全球”?

javascript reactjs electron draftjs

6
推荐指数
1
解决办法
9204
查看次数

即使数组返回节点,addEventListener 也不是函数?

我意识到还有其他类似标题的问题,但我遇到了一些非常奇怪的问题。

在下面的代码中,我得到一个节点数组并遍历该数组以添加事件:

   activateButtons = () => {
   let catButtons = document.getElementsByClassName('catalogItem')
   for(i in catButtons){
     console.log(catButtons[i])
     catButtons[i].addEventListener('click', () => {
       catButtons[i].classList.toggle('active')
       if(catButtons[i].nextElementSibling){
         catButtons[i].nextElementSibling.classList.toggle('show')
      }
    })
  }
}
Run Code Online (Sandbox Code Playgroud)

无论我使用 ('click', e => 还是 ('click', () =>。后来的函数使用 ('click', () => 并且在创建按钮时工作正常。

我在那里记录数组以确保它被捕获( activateButtons 在另一个构造 dom 元素的函数之后调用,该部分工作正常。在日志中我得到:

在此处输入图片说明

根据其他答案,我这样做是正确的 - 我将事件侦听器分配给数组中的节点,而不是数组本身。阵列显然正在组装。那么为什么我会收到这个错误呢?

在代码的其他地方,当最初创建一个新按钮时,该函数包含几乎完全相同的代码,除了我创建按钮 (document.createElement) 然后立即将其分配给按钮,而不是需要一个数组。

在加载时,已经创建的按钮从 json 文件重新实例化,当我尝试添加事件监听器时,我没有收到错误,但也没有收到事件,所以我决定添加创建按钮后,所有事件一次全部完成。我在这里缺少什么?

html javascript

0
推荐指数
1
解决办法
30
查看次数

标签 统计

javascript ×2

draftjs ×1

electron ×1

html ×1

reactjs ×1