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

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

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

但问题是,我必须通过 Jinja2 template 与我的 ReactJS 应用程序共享一些变量在基本模板中index.html其中有 reactjs根组件节点<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> 

以上所有js变量都被设置为全局window目的 。

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

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

请您参考如下方法:

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

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

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


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!