2016-10-03 104 views
1

有一个登录组件。我的应用程序入口点是登录页面。登录成功后,移至主页面(仪表板&导航)。成功登录主页后显示导航组件和仪表板,但导航不起作用。我得到的错误:react-router位置与任何路由不匹配

反应路由器的位置“/例子”没有匹配的路由 反应路由器的位置“/仪表板”没有匹配的路由

我的登录组件是

var React = require('react'); 
var {Link} = require('react-router'); 
var Dashboard = require('Dashboard'); 

var Login = React.createClass ({ 
onFormSubmit: function(e){ 
    e.preventDefault(); 
    window.location.href = '/main' 
}, 
render: function(){ 
return (
<div> 
<h1 className="text-center">Login</h1> 
    <form onSubmit={this.onFormSubmit}> 
    <input type="text" ref="username"/> 

    <button className="button">Login</button> 
    </form> 
</div> 
) 
} 
}); 

module.exports = Login; 

我的仪表盘组件

var React = require('react'); 
var Nav = require('Nav'); 

var Dashboard = (props) => { 
    return (
    <div> 
     <h1> Dashboard</h1> 
    </div> 
    </div> 
); 
} 

module.exports = Dashboard; 

主要成分Main.jsx

var React = require('react'); 
var Nav = require('Nav'); 

var Main = (props) => { 
    return (
    <div> 
     <h1> Main</h1> 
    <Nav/> 
    <div className="row"> 
    <div className="columns medium-6 large-4 small-centered"> 
     {props.children} 
    </div> 
    </div> 
    </div> 
    ); 
    } 

    module.exports = Main; 

主要app.jsx文件

var React = require('react'); 
var ReactDOM = require('react-dom'); 
var {Route, Router, IndexRoute, browserHistory} = require('react- router'); 
var Login = require('Login'); 
var Dashboard = require('Dashboard'); 
var About = require('About'); 
var Examples = require('Examples'); 
var Main = require('Main'); 


require('style!css!foundation-sites/dist/foundation.min.css') 
$(document).foundation(); 

ReactDOM.render(
    <Router history={browserHistory}> 
    <Route path="/" component={Login}/> 
    <Route path="/main" component={Main}> 
     <Route path="about" component={About}/> 
     <Route path="examples" component={Examples}/> 
     <IndexRoute component={Dashboard}/> 
    </Route> 
    </Router>, 
    document.getElementById('app') 
); 

我server.js文件:

var express = require('express'); 

// Create our app 
var app = express(); 

app.get(['/', '/main'], function(req, res){ 
res.sendfile('./public/index.html') 
}); 


app.use(express.static('public')); 

app.listen(3000, function() { 
    console.log('Express server is up on port 3000'); 
}); 

回答

1

你宣布你的应用程序的路线,像这样:

<Route path="/main" component={Main}> 
    <Route path="about" component={About}/> 
    <Route path="examples" component={Examples}/> 
    <IndexRoute component={Dashboard}/> 
</Route> 

所以你应该使用:

/main/examples 
/main/dashboard 

代替:

/examples 
/dashboard 
+1

我试过/主/例子, /主/仪表板。仍然没有工作 – user2194838

+0

如果我的根路径有一个像“/ main /:some_id”这样的uri参数? –

+0

我们正面临同样的问题,只需添加/ main/eqv。没有帮助。任何人解决了这个? – svante

0

至于我可以告诉你路由到/main在登录这就是为什么你DashboardMain页是否正常运行。如果你想查看examples页面,你需要重定向到/main/examples,如果about然后/main/about。你也应该总是使用react-router API重定向。退房this答案找出如何以编程方式使用重定向反应路由器

0

阵营路由器V4用的WebPack执行如下

import { BrowserRouter as Router, Route } from 'react-router-dom'; 
 

 
ReactDOM.render(
 
    <Router> 
 
    <div> 
 
     <Route exact path="/" render={() => <h1>main page</h1>} /> 
 
     <Route path="/about" render={() => <h1>about page</h1>} /> 
 
     <Route path="/contact" render={() => <h1>contact page</h1>} /> 
 
    </div> 
 
    </Router>, 
 
    document.getElementById('root')); 
 
    
 
    //webpack build script change add --history-api-fallback in package.json file 
 
    "scripts": { 
 
    "start": "webpack-dev-server --history-api-fallback" 
 
    } 
 
    
 
    Now run following command on terminal: npm start