7

我正在开发一个带有 Flask 后端和 ReactJS 前端的应用程序。ReactJS 应用程序已开发并与 webpack 捆绑在一起。

一切都适用于捆绑在一起的客户端渲染webpack

我现在正在尝试使用python-react添加服务器端渲染。

但问题是,我必须通过具有根组件 nodeJinja2 template的基本模板将一些变量共享给我的 ReactJS 应用程序。index.htmlreactjs<div id='react-node'></div>

我必须通过下面的模板将我的routes和发送config到我的应用程序,jinja2

//index.html

<!doctype html>
<html>
...
...

<script type='text/javascript'>
  var STATIC_IMAGE_ROOT = "{{ url_for('static', filename='img/') }}";
  var ROUTES = { ... };
...
</script>

</html>

以上所有 js 变量都被设置为 global windowobject 。

但是当我试图在 python 中渲染组件时,它会抛出windowobject异常ReactRenderingError: react: ReferenceError: window is not defined

解决此问题的最佳方法是什么?

4

2 回答 2

5

在服务器上渲染时没有全局窗口。您可以创建一个假窗口,首先检查该窗口是否存在:

if (typeof(window) == 'undefined'){
    global.window = new Object();
}

或者,您可以使用jsdom或类似的库来创建假 DOM。

于 2015-06-24T19:45:32.943 回答
2

只需将以下内容添加到 webpack 配置中:

  // By default, Webpack is set up to target the browser,
  // not a Node environment. Try setting target in your config:
  target: 'node',
于 2016-03-01T14:39:41.780 回答