javascript - React Router.match 在尝试服务器渲染 React 元素时没有回调参数

标签 javascript reactjs typescript react-router server-rendering

我尝试过关注 this guidethis question ,但是当 ReactRouter.match 被触发时,所有回调参数都未定义。

这是我的服务器:

var app = new (require('express'))()
var port = 3000

var ReactDomServer = require('react-dom/server');
var ReactRouter = require('react-router');
var routes = require('./es6/routes.js');

app.use(function(req, res) {
    console.log(req.url);
    ReactRouter.match({ routes: routes, location: req.url }, function(error, redirectLocation, renderProps) {
        console.log('error', error); // undefined
        console.log('erredirectLocationror', redirectLocation); // undefined
        console.log('renderProps', renderProps); // undefined
    });
})

app.listen(port, function(error) {
  if (error) {
    console.error(error)
  } else {
    console.info("==> Listening on port %s. Open up http://localhost:%s/ in your browser.", port, port)
  }
})

如注释所示,errorredirectLocationrenderProps 都记录为 undefined

开始记录routes变量:

{ default: 
   { '$$typeof': Symbol(react.element),
     type: 
      { [Function]
        displayName: 'Route',
        createRouteFromReactElement: [Function: createRouteFromReactElement],
        propTypes: [Object] },
     key: null,
     ref: null,
     props: { path: '/', component: [Function: App], children: [Object] },
     _owner: null,
     _store: {} } }

它以 typescript 文件开始,routes.tsx:

import * as React from 'react'
import { Route } from 'react-router'
import App from './containers/app';
import Home from './containers/home';

export default (
    <Route path='/' component={App}>
        <Route path='/home' component={Home} />
    </Route>
)

编译为es6/routes.js

"use strict";
const React = require('react');
const react_router_1 = require('react-router');
const app_1 = require('./containers/app');
const home_1 = require('./containers/home');
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = (React.createElement(react_router_1.Route, {path: '/', component: app_1.default}, React.createElement(react_router_1.Route, {path: '/home', component: home_1.default})));
//# sourceMappingURL=routes.js.map

我错过了什么?

最佳答案

您收到未定义值,因为没有任何内容匹配,这是 404ing。

没有任何匹配的原因是因为您混合了 es5 和 es6 模块。尝试将 routes.default 传递到 match() 中。

关于javascript - React Router.match 在尝试服务器渲染 React 元素时没有回调参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37668368/

相关文章:

javascript - 尝试从 iframe 中获取 div,然后将其放入我自己网站上的 div 中

php - 如何确保我的 PHP api 只能由特定的 javascript 页面使用

reactjs - react : To know size of the element before it gets rendered

javascript - 尝试导入错误 : './movieReducer' does not contain a default export (imported as 'movieReducer' )

java - RSA 使用 JSEncrypt 加密并使用 BouncyCaSTLe (Java) 解密

javascript - 商店订阅在外部组件中不起作用

javascript - 上传前在angularjs Controller 中解析文件

javascript - 对象作为 React 子项无效(找到 : object with keys {login, id、点头等

javascript - 导入可出租的 RxJS 运算符

java - 如何使用http从Java后端在Angular前面显示一些数据