【发布时间】:2017-04-20 12:58:07
【问题描述】:
我正在尝试在我的本地机器上创建一个类似于 jsfiddle 的简单项目配置。
我只想为每个小提琴和一个服务器拥有 3 个文件来启动单页应用程序。我主要使用 react 生态系统。
当我想使用 react-router 时,问题就来了。使用此设置,只有根“/”路由触发,所有子路由重定向到 index.html。
(我将省略样式文件,因为我怀疑它是问题的根源)
有什么建议吗?
server.js
var express = require('express');
var path = require('path');
var morgan = require('morgan');
//var history = require('connect-history-api-fallback');
var PORT = 3007;
var HOST = 'localhost'
var app = express();
/*
app.use(history({
disableDotRule: true,
verbose: true
}));
*/
app.use(morgan('tiny'));
// Serve static assets
app.use(express.static(__dirname));
// Always return the main index.html
app.get('*', function(req, res) {
res.sendFile(path.join(__dirname, 'index.html'));
});
app.listen(PORT, HOST, function () {
console.log('Example app listening on port ' + HOST + ':' + PORT + '...');
});
index.html
<html>
<head>
<title>multi-page-form-with-router</title>
<link rel="stylesheet" type="text/css" href="styles.css" media="screen" />
</head>
<body>
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.24.0/babel.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/redux-thunk/2.2.0/redux-thunk.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/redux/3.6.0/redux.min.js"></script>
<script src="https://unpkg.com/react@15.5.4/dist/react.js"></script>
<script src="https://unpkg.com/react-dom@15.5.4/dist/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-redux/5.0.3/react-redux.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-router/3.0.4/ReactRouter.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/redux-form/6.6.3/redux-form.min.js"></script>
<script type="text/babel" src="main.js"></script>
</body>
</html>
main.js
const { Component } = React
const { Router, Route, browserHistory, IndexRoute, Link } = ReactRouter
const App = () => (
<Router history={browserHistory}>
<Route path='/' component={Header}>
<IndexRoute component={Menu} />
<Route path='first' component={FirstPage} />
<Route path='second' component={SecondPage} />
</Route>
</Router>
);
const Header = () => (
<h1>Multi-page form</h1>
)
const Menu = () => (
<ul>
<li><Link to='first'>Start form</Link></li>
</ul>
)
const FirstPage = () => {
return (
<div>
<p>First Page</p>
<Link to='second'>Next</Link>
</div>
)
}
const SecondPage = () => {
return (
<div>
<p>Second Page</p>
<Link to='overview'>Next</Link>
</div>
)
}
const Overview = () => {
return (<p>Overview</p>)
}
ReactDOM.render(
<App />,
document.getElementById('root')
)
【问题讨论】:
标签: reactjs express react-router single-page-application