- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这样的 HTML 结构:
<body>
<nav>
<!--navigation elements -->
</nav>
<div className='main'>
<!--other elements -->
</div>
<div className='container'></div>
</body>
路由定义如下:
<Router>
<Fragment>
<Navbar />
<Route exact path="/" component={Landing} />
<div className="container">
<Alert />
<Switch>
<Route exact path="/register" component={Register} />
<Route exact path="/login" component={Login} />
<Route exact path="/profiles" component={Profiles} />
</Switch>
</div>
</Fragment>
</Router>
“容器”元素出现在所有路由上,但我不希望它在“/”路由上呈现。
我怎样才能停止<div className="container">
从在 "/"
上呈现路线?我希望它在除 "/"
之外的所有其他路线上呈现.
我找到但不想使用的解决方案是显式插入带有 class="container"
的元素在我的 <Switch>
中呈现的每个组件中.有没有更好的办法?
最佳答案
您应该能够通过 nested routes 实现您的要求和一个 "no match route" .
想法是通过嵌套路由将结构引入路由,以限制 <div className="container">
的呈现到非/
路线。
为此,您可以提取一个呈现 WithContainer
的组件(即 <Route>
)对于路径; /register
, /login
和 /profiles
, 在 <div className="container">
里面.然后你会改变你的 <Switch>
现在为以下路由案例呈现两条路由;
<Route/>
呈现 Landing
与 /
完全匹配的组件<Route/>
呈现您的新 WithContainer
没有特定路线的组件(即任何不完全匹配 /
的路径)通过使用 <Switch>
这样,它会导致路由行为呈现 Landing
或 WithContainer
(但不是两者)取决于第一个匹配的路线。我们利用该行为来限制 WithContainer
的呈现(反过来,<div className="container">
元素)用于“非 /
” 路由。
在代码中,这种方法可以表示为:
const WithContainer = () => (
<div className="container">
{ /* Wrap routes in container div */ }
<Route exact path="/register" component={Register} />
<Route exact path="/login" component={Login} />
<Route exact path="/profiles" component={Profiles} />
</div>)
const Main = () => (
<main>
<Switch>
<Route exact path='/' component={Landing}/>
<Route component={ WithContainer } /> {/* No match route */ }
</Switch>
</main>
)
希望对您有所帮助!
关于javascript - React Router : How to render element on all routes, 除了一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56700735/
我是一名优秀的程序员,十分优秀!