这里提出了类似的问题: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 文件中,我创建窗口(它只是整个应用程序的一个窗口),尝试执行此操作似乎无论我在哪里尝试执行此操作都会引发错误,而且我似乎找不到任何参考根本无法定义“全球”。我应该在哪里定义“全球”?
我意识到还有其他类似标题的问题,但我遇到了一些非常奇怪的问题。
在下面的代码中,我得到一个节点数组并遍历该数组以添加事件:
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 文件重新实例化,当我尝试添加事件监听器时,我没有收到错误,但也没有收到事件,所以我决定添加创建按钮后,所有事件一次全部完成。我在这里缺少什么?