7
反応ルータにはあまり慣れていませんが、ではなく、li
の親要素でアクティブクラスを設定するためにNavLinkの機能が必要です。React Router v4でactiveClassを親に設定する
これを実装するには、NavLink
のソースコードを見て、それを新しい要素にコピーしました。 (例はとにかく、ちょうど同じJSなどについてtypescriptですを使用して)
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うん、上のソリューションがうまくいけば、私の問題はアップデートをブロックする別のコンポーネントがあったことです。私はこのドキュメントでhttps://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/guides/blocked-updates.mdを理解しました –