Eri*_*ira 6 javascript reactjs react-router
我有以下代码,该代码使用所有页面的页眉和页脚呈现应用程序。
app.js
import React from 'react';
import {
Route,
Switch
} from 'react-router-dom';
import { ConnectedRouter } from 'connected-react-router'
import Layout from './components/Layout'
import Home from './homeComponent';
import Login from './loginComponent';
import Dashboard from './dashboardComponent';
const App = ({ history }) => {
return (
<Layout>
<ConnectedRouter history={history}>
<Switch>
<Route exact={true} path="/" component={Home} />
<Route path="/login" component={Login} />
<Route path="/dashboard" component={Dashboard} />
... more routes
<Route component={NoMatch} />
</Switch>
</ConnectedRouter>
</Layout>
);
};
export default App;
Run Code Online (Sandbox Code Playgroud)
layout.js
import Header from './headerComponent'
import Footer from './footerComponent'
import React, {Component} from 'react'
class Layout extends Component {
render() {
return (
<div>
<Header />
{this.props.children}
<Footer />
</div>
)
}
}
Run Code Online (Sandbox Code Playgroud)
跳过某些页面(如“首页”和“登录”路线)的跳过页眉和页脚的最佳方法是什么?
Nic*_*ick 11
我建议创建两个具有自己的页眉和页脚以及私有路由的布局:
公共布局
export const PublicLayout = (props) => <div>
<PublicHeader/>
<Switch>
<Route exact path="/" component={HomePage}/>
<Route exact path='/signin' component={SigninForm} />
<Route exact path='/signup' component={Signup} />
</Switch>
<PublicFooter/>
Run Code Online (Sandbox Code Playgroud)
受保护的布局
export const ProtectedLayout = (props) => <div>
<ProtectedHeader/>
<Switch>
<PrivateRoute exact path='/app/dashboard' component={Dashboard} />
<Route component={NotFound} />
</Switch>
<ProtectedFooter/>
Run Code Online (Sandbox Code Playgroud)
在 app.js 中定义高级路由:
export default () => {
return <div>
<Switch>
<Route path='/app' component={ProtectedLayout} />
<Route path='/' component={PublicLayout} />
</Switch>
</div>
}
Run Code Online (Sandbox Code Playgroud)
定义私有路由:
export default ({component: Component, ...rest}) => (
<Route {...rest} render={props => (
window.globalState.isAuthenticated() ? (
<Component {...props} />
) : (
<Redirect to={{
pathname: '/signin',
state: {from: props.location}
}} />
)
)} />
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2532 次 |
最近记录: |