在Node.js中出现`window not defined'错误

我知道Node.js中并不存在window ,但是我在客户端和服务器上都使用了React和相同的代码。 任何我用来检查window存在的方法nets me:

未捕获的ReferenceError:未定义窗口

我如何解决这个事实,我不能做window && window.scroll(0, 0)

Sawtaytoes已经得到它。 我将运行componentDidMount()中的任何代码并将其包围:

 if (typeof(window) !== 'undefined') { // code here } 

如果在React渲染组件的时候,窗口对象还没有被创build,那么在组件渲染之后,你可以经常运行你的代码(而且窗口对象肯定是在那个时候创build​​的),所以用户不能分辨其中的不同之处。

 if (typeof(window) !== 'undefined') { var timer = setTimeout(function() { // code here }, 200); } 

我build议不要在setTimeout中放置状态。

这将为您解决这个问题:

 typeof(window) === 'undefined' 

即使未定义variables,也可以使用typeof()进行检查。

这种代码甚至不应该在服务器上运行,它应该在一些componentDidMount ( 参见doc )钩子里面,它只能调用客户端。 这是因为滚动窗口服务器端没有意义。

但是,如果您必须在真正运行客户端和服务器的部分代码中引用窗口,请使用global (代表全局范围 – 例如客户端上的window )。

 <Router onUpdate={() => window.scrollTo(0, 0)} history= {browserHistory}> 

如果您需要在React JS应用程序的顶部打开新页面,请在router.js中使用此代码