2016-03-05 95 views
7

反应路由器是一个非常糟糕的开始...什么似乎基本不起作用。使用反应路由器2.0.0我的链接组件更新的网址是/约,但在那之后我的页面不呈现的关于组件...反应路由器链接不起作用

切入点JS

var React = require('react'); 
var ReactDOM = require('react-dom'); 
var Router = require('react-router').Router; 
var Route = require('react-router').Route; 
var hashHistory = require('react-router').hashHistory; 
var App = require('./components/App.react'); 
var About = require('./components/About'); 

ReactDOM.render(
    <Router history={hashHistory} > 
     <Route path="/" component={App}> 
      <Route path="about" component={About} /> 
     </Route> 
    </Router>, 
    document.getElementById('app') 
); 

App.js

'use strict'; 

var React = require('react'); 
var Link = require('react-router').Link; 
var Header = require('./Header'); 
var UserPanel = require('./UserPanel'); 
var ModelPanel = require('./ModelPanel.react'); 
var EventPanel = require('./event/EventPanel'); 
var VisPanel = require('./vis/VisPanel'); 
var LoginForm = require('./LoginForm'); 
var AppStore = require('../stores/AppStore'); 
var AppStates = require('../constants/AppStates'); 

var App = React.createClass({ 

    [... code omitted ...] 

    render: function() { 
    var viewStateUi = getViewStateUi(this.state.appState); 

    return (
     <div> 
     <Header /> 
     <Link to="/about">About</Link> 
     {viewStateUi} 
     </div> 
    ); 
    } 

}); 

回答

9

由于“关于”的路线是“应用”路线的孩子,你需要或者添加this.props.children到您的应用程序组件:

var App = React.createClass({ 

render: function() { 

    var viewStateUi = getViewStateUi(this.state.appState); 

    return (
     <div> 
     <Header /> 
     <Link href="/about">About</Link> 
     {viewStateUi} 
     {this.props.children} 
     </div> 
    ); 
    } 
}); 

或分开你的路线:

ReactDOM.render(
    <Router history={hashHistory} > 
    <Route path="/" component={App} /> 
    <Route path="/about" component={About} /> 
    </Router>, 
    document.getElementById('app') 
); 
+0

嗯,所以如果不是应用程序的子路径,那么它会工作,对吧? – Patrick

+0

正确!看我的编辑。 –

+0

太棒了,今晚我会测试并阅读所有的文档 - 这在回顾过程中非常明显。 – Patrick

4

出于某种原因,<Link>小号没有工作对我来说与下面的配置。

// index.js

ReactDOM.render(
    <Provider store={store}> 
    <BrowserRouter > 
     <App /> 
    </BrowserRouter> 
    </Provider>, 
    document.getElementById('root') 
); 

// App.js

return (
     <div className="App"> 
     <Route exact={true} path="/:lang" component={Home} /> 
     <Route exact={true} path="/" render={() => <Redirect to={{ pathname: 'pt' }} />} /> 
     <Route path="/:lang/play" component={Play} />} /> 
     <Route path="/:lang/end" component={End} /> 
     </div > 
    ); 

的家庭成分有链接,但在App链接会做同样的。每次我点击它,它只会改变网址,但意见将保持不变。

我能够把它的工作,当我加入withRouter到App.js

export default withRouter(connect(mapStateToProps, { f, g })(App)); 

我还是不明白发生了什么。也许它与redux有关系,或者我缺少一些细节。

+2

你说得对,它与Redux有关,因为我刚刚和MobX有同样的问题。问题是MobX/Redux接受了'shouldComponentUpdate'的控制,所以'App'组件不会重新渲染,因为它没有收到'location'作为道具。更多解释在这里的文档:https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/guides/blocked-updates.md – c4k