【发布时间】:2018-09-24 13:38:48
【问题描述】:
我只想显示此网址的导航栏:/contact、/services。而且我不想为/signin 显示导航栏。此刻,这就是我所拥有的:
import React, { Component } from 'react';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import PublicLayout from './components/layouts/PublicLayout';
import SigninLayout from './components/layouts/SigninLayout';
import Main from './components/pages/Main';
import Services from './components/pages/Services';
import Contact from './components/pages/Contact';
class App extends Component {
render() {
return (
<BrowserRouter>
<div className="App">
<Switch>
<PublicLayout>
<Route exact path='/' component={Main} />
<Route exact path='/services' component={Services} />
<Route exact path='/contact' component={Contact} />
</PublicLayout>
<SigninLayout>
<Route exact path='/signin' component={Signin} />
</SigninLayout>
</Switch>
</div>
</BrowserRouter>
);
}
}
export default App;
当我转到/signin url 时,它仍然给我导航栏。那么伙计们——你如何在 React 中为不同的页面呈现不同的布局?请帮忙!
UPD:我的 PublicLayout 代码:
import React, { Component } from 'react';
import Navbar from '../nav/Navbar';
class PublicLayout extends Component {
state = {
items: [
{ id: 1, name: 'Услуги', link: '/services' },
{ id: 2, name: 'Как это работает?', link: '/contacts' },
{ id: 3, name: 'Войти', link: '/signin' },
]
}
render() {
return (
<div>
<Navbar items={ this.state.items } />
{ this.props.children }
</div>
);
}
}
export default PublicLayout;
我的 SignInLayout 代码:
import React, { Component } from 'react';
class SigninLayout extends Component {
state = {
}
render() {
return (
<div>
{ this.props.children }
</div>
);
}
}
export default SigninLayout;
我的登录组件:
import React, { Component } from 'react';
class Signin extends Component {
state = {
}
render() {
return (
<div>
<h1>Войти</h1>
<form>
<input type="text" placeholder="укажите e-mail" />
<input type="text" placeholder="укажите пароль" />
<button>Войти</button>
</form>
</div>
);
}
}
export default Signin;
【问题讨论】:
-
我只是在这方面做得相当糟糕;我在顶层渲染了一个组件,然后根据路由有条件地更改了它的渲染。我有兴趣看到一些更好的解决方案
-
可以给我们看一下SigninLayout、PublicLayout和Signin组件代码吗?
-
@c-chavez 用代码示例更新了我的问题。谢谢你帮助我。
-
对于以后的用户,请查看此代码示例codesandbox.io/s/react-router-v5-multiple-layout-forked-y5i1e
标签: javascript reactjs react-router