【发布时间】:2017-08-16 06:59:44
【问题描述】:
对反应路由器不太熟悉,但我需要 NavLink 的功能来在父 li 元素上设置活动类,而不是 a 元素。
为了实现这一点,我只是查看了NavLink 的源代码并将其复制到一个新元素中。 (使用 typescript 的例子,但和 js 差不多)
import * as React from 'react';
import { Link, withRouter, Route } from 'react-router-dom';
class LiNavLink extends React.Component<any, {}> {
render() {
const {to,exact, strict, activeClassName, className, activeStyle, style, isActive: getIsActive, ...rest } = this.props;
return (
<Route
path={typeof to === 'object' ? to.pathname : to}
exact={exact}
strict={strict}
children={({ location, match }) => {
const isActive = !!(getIsActive ? getIsActive(match, location) : match)
return (
<li
className={isActive ? [activeClassName, className].join(' ') : className}
style={isActive ? { ...style, ...activeStyle } : style}>
<Link
to={to}
{...rest}
/>
</li>
)
}}
/>
);
}
}
export default LiNavLink;
然后是用法:
<ul>
<LiNavLink activeClassName='active' exact={true} strict to="/example"><span>Active</span></LiNavLink>
<LiNavLink activeClassName='active' exact={true} strict to="/example/archived"><span>Archived</span></LiNavLink>
</ul>
我正在使用HashRouter,由于某种我无法弄清楚的原因,当路线改变时它不会更新,只有当我硬“刷新”页面时它才会更新它应该如何更新。
我相信它永远不会更新,因为道具永远不会改变?所以它不知道自己更新?
我怎样才能让它更新?还是我的问题在其他地方?
【问题讨论】:
-
你找到答案了吗?我也想要这个功能。
-
@JimFactor 是的,上面的解决方案有效,我的问题是有另一个组件阻止更新。我用这个文档github.com/ReactTraining/react-router/blob/master/packages/…
-
谢谢,原始代码有效,我只是添加了一个
aClassName来传递<a>元素的类名
标签: reactjs react-router-v4 react-router-dom