参考错误:self未定义。

8

我们遇到了问题

"引用错误:self未定义"

在尝试使用React-data-grid时,我们遇到了这个问题。问题出现在服务器端,当我们尝试使用webpack构建nodejs应用程序时。我们在生成的捆绑文件中遇到了问题,具体是以下几行:

isOldIE = memoize(function() {          return /msie
[6-9]\b/.test(self.navigator.userAgent.toLowerCase());      }),

你能告诉我们如何解决这个问题吗?看起来React Data Grid包在服务端渲染方面存在问题。


你能否发布代码,展示在这行代码中你是如何定义 self 的? - redOctober13
您在执行代码时未在作用域内声明 self。错误信息非常清晰明了。 - Scott Marcus
1
相关链接:https://github.com/adazzle/react-data-grid/issues/361 - Jordan Running
@redOctober13 该代码期望使用浏览器定义的普通 self 全局变量,它在服务器端环境中不存在;这基本上与在Node代码中使用 window 时出现的“引用错误:未定义窗口”相同。 - apsillers
2个回答

12

self 可能指的是 window,但在服务器端不可用...它只在浏览器上下文中可用。 navigator 的引用尤其明显。此代码试图测试 Internet Explorer 版本的用户代理。

self.navigator.userAgent.toLowerCase()

正如Jordan所指出的那样,存在一个关于同构渲染的开放问题#361

如果可能的话,请尽量避免在服务器端执行该代码。否则,您将不得不等待react-data-grid的补丁。


谢谢styfle。这有助于找出解决方案。 - Rakesh Nallam

0
通过使用以下软件包 exenv,已解决该问题,该软件包限制了它仅在客户端渲染期间检查所发布的条件。
var ExecutionEnvironment = require('exenv');
if(ExecutionEnvironment.canUseDOM) {
  const ReactDataGrid = require('react-data-grid');
  const {Toolbar, Filters: {NumericFilter, AutoCompleteFilter, MultiSelectFilter, SingleSelectFilter}, Data: {Selectors}} = require('react-data-grid-addons');
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接