gpt4 book ai didi

node.js - 使用 React router 时出现此错误 TypeError : type. toUpperCase is not a function

转载 作者:太空宇宙 更新时间:2023-11-03 22:42:34 24 4
gpt4 key购买 nike

我正在使用react和express.js开发一个同构应用程序。我正在使用 React Router 进行客户端路由。运行应用程序时,我在控制台中收到以下错误和警告

警告:失败的 propType:无效的 prop handler类型 object供应给Route ,预计function .

警告:无效的未定义handler类型 object供应给UnknownComponent ,预计function .

类型错误:type.toUpperCase 不是函数

这是components/main.jsx

的代码
var React = require('react');
var Counter = require('./flashCard.js');
var RouterModule = require('react-router');
var RouteHandler = require('react-router').RouteHandler
var routes = require('./routes.js')
var APP = React.createClass({
render: function() {
return (
<html>
<head>
<title>8 facts</title>
<link rel="stylesheet" type="text/css" href="/stylesheets/style.css"/>
<script src="/javascripts/bundle.js"></script>
</head>
<body>
<RouteHandler/>
</body>
</html>
);
}
});

module.exports = APP;

if(typeof window !== 'undefined') {
window.onload = function() {

RouterModule.run(routes,RouterModule.HistoryLocation, function (Handler) {
React.render(<Handler/>, document);
});
}
}

这是components/routes.jsx

的代码
var React = require('react');
var Route = require('react-router').Route
var Counter = require('./flashCard.js');
var App = require('./main.js')
var Demo = require('./demo.js')

var routes = (

<Route name="home" handler={App}>
<Route path="/" handler={Counter}/>
<Route path="/demo" name ="demo" handler={Demo}/>
</Route>

);

module.exports = routes;

这是服务器端渲染代码..app.js

var express = require('express');
var http = require('http');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
require('node-jsx').install();
var db = require('./models/schema.js');
var mongoose = require('mongoose');
var app = express();
var React = require('react');
var RouterModule = require('react-router')
var routes = require('./components/routes.js')
var posts = require('./routes/index.js');

//database
db.connectDB().then(function(){
console.log('connected');
}, function(err){
console.log('error');
});
//database

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(favicon());
app.use(logger('dev'));
app.use( bodyParser.json() ); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));


app.use('/posts', posts);

//server side rendering code
app.use(function(req, res) {
RouterModule.run(routes, req.path, function(Handler) {
var Html = React.createElement(Handler);
res.send(React.renderToString((Html)));
});
});

最佳答案

首先,看起来您正在使用 React Router 的 0.13.3 版本。没问题,而且这是最新的稳定版本,但我建议您考虑一下切换到 1.0.0-beta 3。两者之间的 API 发生了很大变化,我认为变得更好了。

至于您收到的错误,这意味着当您引用<Handler />时,您传递的对象实际上不是组件。 。通常,当您忘记需要组件或在组件本身中使用 module.exports 时,就会发生这种情况。在 0.13.3 的文档中,看起来他们使用 <Root />您使用过的组件 <Handler /> 。也许尝试切换到 <Root /> ?或者,如果您以某种方式重命名 <Root /><Handler />在另一个文件中,查看那里是否有任何问题。

或者,只需切换到 1.0.0-beta3。好多了。

关于node.js - 使用 React router 时出现此错误 TypeError : type. toUpperCase is not a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31626440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com