React 路由器未重定向到确切 url
React router not redirect on the exact url
我正在构建一个使用了 react-router 的 Web 应用程序。当我点击 url localhost:8080/user 它工作正常。当我点击 localhost:8080/user/login 它不起作用并且控制台显示 unexpected tokken > 这是什么意思?我无法理解这个问题。
当我更改为任何其他代码时,这行代码中还有一件事 class 然后它也不起作用 .
Routes.js
import React from 'react';
import UserBase from './UserBase.js';
import Dashboard from './Dashboard.js';
import Login from './Login.js';
// var ReactRouter = require('react-router');
// var Router = ReactRouter.Router;
// var Route = ReactRouter.Route;
import { Router, Route, IndexRoute, Link, IndexLink, browserHistory } from 'react-router'
var Routes = (
<Router history={browserHistory}>
<Route path="/" component={Login}/>
<Route path="user" component={UserBase}>
<IndexRoute component={Dashboard} />
<Route path="login" component={Login}/>
</Route>
</Router>
);
module.exports = Routes;
Login.js
import React from 'react';
class Login extends React.Component{
constructor(){
super();
}
render(){
return (
<div className="login">
<a className="hiddenanchor" id="signup"></a>
<a className="hiddenanchor" id="signin"></a>
<div className="login_wrapper">
<div className="animate form login_form">
<section className="login_content">
<form>
<h1>Login Form</h1>
</form>
</section>
</div>
<div id="register" className="animate form registration_form">
<section className="login_content">
<form>
<h1>Create Account</h1>
</form>
</section>
</div>
</div>
</div>
);
}
}
export default Login;
如果我删除 'history={browserHistory}',路由 js 工作正常意味着如果我使用丑陋的 url,即与 # 一起使用。如果我点击 http://localhost:8080/#/user/login?_k=jtorvg 工作正常那么问题是什么?
我使用节点服务器和快递包来为每个请求提供服务。
var app = express();
app.use('/', express.static(path.join(__dirname, 'public')));
app.get('*', function(req, res) {
res.sendFile(path.join(__dirname + '/public/index.html'));
});
webpack.config.js
module.exports = {
entry: "./app/components/EntryPoint.js",
output: {
filename:"public/bundle.js"
},
module : {
loaders: [
{
test: /\.jsx?$/,
exclude: /(node_modules|bower_components)/,
loader: 'babel',
query: {
presets: ['react', 'es2015']
}
}
]
}
};
是的。经过几个小时的努力,我得到了一个非常小的错误的答案。在索引页 bundle.js
处,脚本路径必须更改为 url,例如 localhost:8080/user/dashboard。
只需添加 <script src="/bundle.js" />
而不是 <script src="bundle.js" />
我正在构建一个使用了 react-router 的 Web 应用程序。当我点击 url localhost:8080/user 它工作正常。当我点击 localhost:8080/user/login 它不起作用并且控制台显示 unexpected tokken > 这是什么意思?我无法理解这个问题。
当我更改为任何其他代码时,这行代码中还有一件事 class 然后它也不起作用 .
Routes.js
import React from 'react';
import UserBase from './UserBase.js';
import Dashboard from './Dashboard.js';
import Login from './Login.js';
// var ReactRouter = require('react-router');
// var Router = ReactRouter.Router;
// var Route = ReactRouter.Route;
import { Router, Route, IndexRoute, Link, IndexLink, browserHistory } from 'react-router'
var Routes = (
<Router history={browserHistory}>
<Route path="/" component={Login}/>
<Route path="user" component={UserBase}>
<IndexRoute component={Dashboard} />
<Route path="login" component={Login}/>
</Route>
</Router>
);
module.exports = Routes;
Login.js
import React from 'react';
class Login extends React.Component{
constructor(){
super();
}
render(){
return (
<div className="login">
<a className="hiddenanchor" id="signup"></a>
<a className="hiddenanchor" id="signin"></a>
<div className="login_wrapper">
<div className="animate form login_form">
<section className="login_content">
<form>
<h1>Login Form</h1>
</form>
</section>
</div>
<div id="register" className="animate form registration_form">
<section className="login_content">
<form>
<h1>Create Account</h1>
</form>
</section>
</div>
</div>
</div>
);
}
}
export default Login;
如果我删除 'history={browserHistory}',路由 js 工作正常意味着如果我使用丑陋的 url,即与 # 一起使用。如果我点击 http://localhost:8080/#/user/login?_k=jtorvg 工作正常那么问题是什么?
我使用节点服务器和快递包来为每个请求提供服务。
var app = express();
app.use('/', express.static(path.join(__dirname, 'public')));
app.get('*', function(req, res) {
res.sendFile(path.join(__dirname + '/public/index.html'));
});
webpack.config.js
module.exports = {
entry: "./app/components/EntryPoint.js",
output: {
filename:"public/bundle.js"
},
module : {
loaders: [
{
test: /\.jsx?$/,
exclude: /(node_modules|bower_components)/,
loader: 'babel',
query: {
presets: ['react', 'es2015']
}
}
]
}
};
是的。经过几个小时的努力,我得到了一个非常小的错误的答案。在索引页 bundle.js
处,脚本路径必须更改为 url,例如 localhost:8080/user/dashboard。
只需添加 <script src="/bundle.js" />
而不是 <script src="bundle.js" />