【发布时间】:2017-05-09 08:09:13
【问题描述】:
我正在实现一个简单的 React 组件 (example 2 here: navigation menu),但添加了 React-Router 以让点击导航菜单激活不同的路由。我让它几乎可以正常工作:单击按钮的文本会将您带到不同的路线,但在inline-block 中单击其他地方 只会更改样式(激活class="active")但不会更改路由(onClick 监听器位于 li 标记上)。
如下所示,您可以单击Services 文本 来激活服务路由,但如果您单击About 块而不是块本身的文本, 它会将About 注册为活动但不会更改路由。
这是 React 和我的 css 中的相关代码:
类导航扩展 React.Component {
constructor() {
super()
this.state = {chosenIndex: 0, tabs: ['Home', 'Services', 'About', 'Contact us']}
this.selectTab = this.selectTab.bind(this)
}
selectTab(e, i) {
e.preventDefault()
this.setState({chosenIndex: i})
}
render() {
let buttons = this.state.tabs.map((tab, index) => {
return (
<li key={index} className={index === this.state.chosenIndex ? 'active' : 'inactive'} onClick={event => this.selectTab(event, index)}><Link to={nameToPath(tab)}>{tab}</Link></li>
)
})
return (
<BrowserRouter>
<div>
<ul>
{buttons}
</ul>
<Match exactly pattern="/" component={Home} />
<Match pattern="/services" component={Services} />
<Match pattern="/about" component={About} />
<Match pattern="/contactus" component={ContactUs} />
<Miss component={Home} />
</div>
</BrowserRouter>
)
}
CSS:
html{
font:24px normal Arial, sans-serif;
color:#626771;
background-color:#fff;
}
body{
padding:60px;
text-align: center;
}
ul{
list-style:none;
display: inline-block;
}
ul li{
display: inline-block;
padding: 10px 20px;
cursor:pointer;
background-color:#eee;
text-decoration: none;
color:#7B8585;
transition:0.3s;
font: bold 14px Arial;
}
ul li:hover {
background-color:#beecea;
}
ul li.active {
background-color:#41c7c2;
}
a {
text-decoration: none;
color: #7b8585;
display: block;
}
ul li.active a {
color: #fff;
}
p {
padding-top:15px;
font-size:16px;
}
【问题讨论】:
-
没有完全调查,但我很确定这个页面包含你需要的所有东西:github.com/reactjs/react-router-tutorial/tree/master/lessons/…
-
请附上您的
selectTab功能代码。我不确定您是说应该在页面之间导航还是只是突出显示应用中的选项卡。 -
@PaulS 我刚刚将它添加到问题中。现在单击选项卡而不是文本只会更改突出显示;导航仅在单击文本本身时发生。如果单击导航“框”中的任何位置,我希望它能够导航。
标签: css react-router