Javascript 使用ReactDOM时未定义React
我试图使react router v1.0正常工作,但当我为服务器端渲染编写路由器时,在浏览器中出现以下错误:Javascript 使用ReactDOM时未定义React,javascript,reactjs,Javascript,Reactjs,我试图使react router v1.0正常工作,但当我为服务器端渲染编写路由器时,在浏览器中出现以下错误:react未定义 router.js: 'use strict'; import { Router, Route, match, RoutingContext } from 'react-router'; import routes from './routes'; import {renderToString} from 'react-dom/server'; export def
react未定义
router.js
:
'use strict';
import { Router, Route, match, RoutingContext } from 'react-router';
import routes from './routes';
import {renderToString} from 'react-dom/server';
export default function(req, res, next) {
match({routes, location: req.url}, (error, redirectLocation, renderProps) => {
if (error) {
res.status(500).send(error.message)
} else if (redirectLocation) {
res.redirect(302, redirectLocation.pathname + redirectLocation.search)
} else if (renderProps) {
let markup = renderToString(<RoutingContext {...renderProps} />);
res.render('index', {markup: markup});
} else {
res.status(404).send('Not found')
}
})
};
我和你做的差不多。
当我查看传输的代码(使用babelify)时,我看到:
但是browserify、babelify和react router难道不应该通过在代码中引入所需的模块来解决这个问题吗 您可以从传输的输出中看到jsx被转换为:
React.createElement(_reactRouter.RoutingContext, renderProps)
这需要引用React
才能运行。
只需将导入添加到router.js
的顶部即可解决此问题:
'use strict';
import { Router, Route, match, RoutingContext } from 'react-router';
import routes from './routes';
import {renderToString} from 'react-dom/server';
import React from 'react';
Browserify只了解如何读入导入的模块。因此,在这种情况下,您必须显式导入
React
您是否尝试在React.js中导入React
?您的意思是router.js
?没错。我的问题是,为什么我们要进口一些不直接使用的东西?这是因为糟糕的设计吗?它是在Babel传输JSX之后直接使用的。我知道,但我的意思是你看不到它是从原始代码(传输之前)直接使用的。不管怎样,它现在起作用了。thanks@ArianHosseinzadeh唯一的方法是尝试使用它)我有同样的问题:)
React.createElement(_reactRouter.RoutingContext, renderProps)
'use strict';
import { Router, Route, match, RoutingContext } from 'react-router';
import routes from './routes';
import {renderToString} from 'react-dom/server';
import React from 'react';