HeaderおよびFooterをレンダリングするLayoutコンポーネントを作成しようとしています。後でLayoutを使用できるように
<Layout> ... </Layout>
明らかに、ヘッダーとフッターでルーティングを使用しました。これを行うには、使用する必要があります
<Router history...
<Route path...
私のlayout.jsでこれを次々に(ヘッダーとフッター用:これは間違っていると感じていますが)行います。できます。ヘッダーとフッターがブラウザーに表示されます。 ただし、正しく機能しません。更新すると、フッターが消え、場合によってはヘッダーとフッターの両方が消えます。ルーターを次々にレンダリングすることがこの誤動作の原因であると強く信じていますが、正しいアプローチがわかりません。また、次のスニペットを使用したくない
header.js
import React from 'react';
import {Link} from 'react-router'
import {Navbar, NavItem} from 'react-materialize';
export default React.createClass({
render(){
return (
<div>
<Navbar brand='logo' right>
<NavItem><Link to="/Home" activeClassName="active">Home</Link></NavItem>
<NavItem><Link to="/Sign-In" activeClassName="active">Sign In</Link></NavItem>
<NavItem><Link to="/Register" activeClassName="active">Register</Link></NavItem>
</Navbar>
{this.props.children}
</div>
)
}
})
footer.js
import React, {Component} from 'react';
import {Link} from 'react-router'
import {Footer} from 'react-materialize';
import '../../resource/template.css'
class RT_Footer extends Component{
render(){
return (
<div>
{this.props.children}
<Footer copyrights="© 2015 Copyright Text"
moreLinks={
<Link className="grey-text text-lighten-4 right" href="#!">More Links</Link>
}
links={
<ul>
<li><Link to="/About Us" className="grey-text text-lighten-3">About Us</Link></li>
<li><Link to="/Terms & Conditions" className="grey-text text-lighten-3">Terms & Conditions</Link></li>
<li><Link to="/Help" className="grey-text text-lighten-3">Help</Link></li>
<li><Link to="/Contact Us" className="grey-text text-lighten-3">Contact Us</Link></li>
</ul>
}
className='example'
>
<h5 className="white-text">Footer Content</h5>
<p className="grey-text text-lighten-4">You can use rows and columns here to organize your footer content.</p>
</Footer>
</div>
);
}
}
export default RT_Footer;
layout.js
import {Router, Route, browserHistory} from 'react-router'
class Layout extends Component {
render(){
return (
<div>
<span>
<Router history={browserHistory}>
<Route path="/" component={Header}>
<Route path="/Home" component={Home}/>
<Route path="/Sign-In" component={SignIn}/>
<Route path="/Register" component={Register}/>
</Route>
</Router>
</span>
<span>
<Router history={browserHistory}>
<Route path="/" component={RT_Footer}>
<Route path="/About Us" component={About}/>
<Route path="/Terms & Conditions" component={TC}/>
<Route path="/Register" component={Register}/>
</Route>
</Router>
</span>
</div>
);
}
}
export default Layout;
次に、index.jsでLayoutをレンダリングしました
do n'tルーターコンポーネントをレンダリングすることをお勧めしますtwice(チェックしていませんが、おそらくできません)。
それで、Routerコンポーネントの仕組み:
さて、あなたの場合、そのようなことをすることをお勧めします:
app.js
import {Router, Route, browserHistory} from 'react-router'
import Layout from './components/Layout'
// Import here all the required components used by the router such as SignIn, Register, ...
render(
<Layout>
<Router history={browserHistory}>
<Route path="/" component={RT_Footer}>
<Route path="/About Us" component={About}/>
<Route path="/Terms & Conditions" component={TC}/>
<Route path="/Register" component={Register}/>
// Add as many Route components as needed
</Router>
</Layout>,
document.getElementById('react-anchor')
レイアウトファイルは次のようになります。
layout.js
import Header from './Header'
import Footer from './Footer'
import React, {Component} from 'react'
class Layout extends Component {
render() {
return (
<div>
<Header />
{this.props.children}
<Footer />
</div>
)
}
}
そして、Header and Footerコンポーネントで、必要なものをレンダリングして、react-routerまたはライブラリが提供する他の方法から使用できる、要求されたコンポーネントをロードするためのリンクを提供します(ドキュメントを参照)
編集:
「利用規約」などのルートパスに注意することは、おそらく有効なパスではありません