【发布时间】:2019-08-20 01:08:30
【问题描述】:
我正在使用 React Router 构建我的 NAV 标题栏。
根据我的应用程序被路由到的页面,我想更改标题的样式。
例如,在下面的代码中,如果我的应用程序被路由到“/”,我希望 NAV 的样式定义为:
className={classes.HeaderA}
src={headerLogoA}
className={classes.LogoA}
但如果它被路由到“/video”或“/industry”,我希望 NAV 的样式定义为:
className={classes.HeaderB}
src={headerLogoB}
className={classes.LogoB}
我考虑过使用状态变量“originalHeader”来确定使用哪种类型的样式,“true”用于样式 A,“false”用于样式 B。
我认为我可以使用“this.setState({ originalHeader: false})”让特定的“Route”或“NavLink”标签将此变量更改为“true”或“false”。如:
<NavLink {this.setState({ originalHeader: false})} to="/video" exact>About<br></br>OpenSeatDirect</NavLink>
或者,
<Route {this.setState({ originalHeader: false})} path="/video" exact component={ Video }/>
然后,我将定义一个变量,例如“NavType”,以根据“originalHeader”的值使用样式 A 或 B 返回我的代码的“Nav”部分。即使下面的代码显示了这个变量的定义,我也没有在后面的代码中使用它。
当我尝试将“this.setState({ originalHeader: false})”添加到起始“Route”或“NavLink”标签时,抛出了一个错误。
有什么建议吗?
import React, { Component } from 'react';
import { Route, NavLink } from 'react-router-dom';
import Aux from '../../hoc/Auxiliary/Auxiliary';
import Main from '../../containers/Main/Main';
import Video from '../../containers/Video/Video';
import Industry from '../../containers/Industry/Industry';
import classes from './Layout.css';
import headerLogoA from '../../imageA.png';
import headerLogoB from '../../imageB.png';
class Layout extends Component {
state = {
originalHeader: true
}
let NavType = (
if (this.state.originalHeader) {
return (
<Nav className={classes.HeaderA}>
<ul >
<li><img src={headerLogoA} className={classes.LogoA}/></li>
<li><NavLink to="/" exact>Home<br></br>Page</NavLink></li>
<li><NavLink to="/video" exact>About<br></br>OpenSeatDirect</NavLink></li>
<li><NavLink to="/industry" exact>Industry<br></br>Overview</NavLink></li>
</ul>
</Nav>
else {
return (
<Nav className={classes.HeaderB}>
<ul >
<li><img src={headerLogoB} className={classes.LogoB}/></li>
<li><NavLink to="/" exact>Home<br></br>Page</NavLink></li>
<li><NavLink to="/video" exact>About<br></br>OpenSeatDirect</NavLink></li>
<li><NavLink to="/industry" exact>Industry<br></br>Overview</NavLink></li>
</ul>
</Nav>
render () {
return (
<Aux>
// I though of replacing this section with "{NavType}"
<Nav className={classes.HeaderA}>
<ul >
<li><img src={headerLogoA} className={classes.LogoA}/></li>
<li><NavLink to="/" exact>Home<br></br>Page</NavLink></li>
<li><NavLink to="/video" exact>About<br></br>OpenSeatDirect</NavLink></li>
<li><NavLink to="/industry" exact>Industry<br></br>Overview</NavLink></li>
</ul>
</Nav>
// up to here would be replace with "{NavType}"
<Route path="/" exact component={ Main }/>
<Route path="/video" exact component={ Video }/>
<Route path="/industry" exact component={ Industry }/>
</Aux>
)
}
}
export default Layout;
【问题讨论】:
标签: javascript reactjs react-router-dom