使用ReactJS和Flask Python管理Isomorphic App中的"window"对象

Ibr*_*him 7 serverside-javascript flask reactjs webpack isomorphic-javascript

我正在使用带有ReactJS前端的Flask Backend开发一个应用程序.ReactJS应用程序已经开发并与webpack捆绑在一起.

与捆绑在一起的客户端渲染一切正常webpack.

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

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

我不得不把我routesconfig通过我的应用程序jinja2模板如下图所示,

//index.html

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

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

</html>
Run Code Online (Sandbox Code Playgroud)

所有上述js变量都被设置为全局window对象.

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

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

Mar*_*ark 5

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

if (typeof(window) == 'undefined'){
    global.window = new Object();
}
Run Code Online (Sandbox Code Playgroud)

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