React Routerは
active
を追加しますあなたがリンクしているページにいるとき、NavLinksへのクラス。スタイル付きコンポーネントでこのプロパティにアクセスするにはどうすればよいですか。あなたが彼らのページにいるとき、私は異なる方法でメニュー項目をスタイルする必要があります。
const LinkElem = styled(NavLink)`
font-size: 16px;
font-weight: 400;
${props => console.log(props)};
&:hover {
color: ${props => props.theme.colorOrange};
}
`;
const Menu = props => {
const { me } = props;
return (
<MenuElem>
<li>
{me ? (
<LinkElem to="/account">Account</LinkElem>
) : (
<LinkElem to="/login">Log in / sign up</LinkElem>
)}
</li>
</MenuElem>
);
};
回答 4 件
prop classNameはNavLinkの子に追加されるため、NavLinkレベルではアクセスできません。ドキュメントはこれについて明確ではありませんでした。したがって、props.className === 'active'を確認してスタイルを追加することはできません。
代わりに、スタイル付きコンポーネント内でcssを使用するだけで使用できます。
const LinkElem = styled(NavLink)` // example style &.active { color: ${props => props.theme.orange } } `;
const StyledLink = styled(NavLink)` color: blue; &.active { color: red; } `;
react-router
現在 v4、NavLink
のアクティブ状態をスタイルできますactiveClassName
を使用した依存関係なし およびスタイル付きコンポーネントのattrs()
関数:export const StyledNavLink = styled(NavLink).attrs({ activeClassName, })` &.${activeClassName} { background: red; } `;
関連ドキュメント:
activeClassName
attrs()
関連記事
- React RouterDOMの複数のURLの同じリンクでアクティブなNavLink
- thissetStateを使用してNativeUpdateStateを反応させる
- Reactフックの状態が更新されていません
- ルーター使用時にReactページが自動的に更新されない
- ReactとuseReducerが状態値にアクセスできません
- APIからデータをロードするときにreactフックに設定して状態を保存するときに問題が発生しますか?
- 私のreact関数フックが関数内のデータ状態を返さないのですか?
- プライベートルーターリダイレクトに反応する
- 状態が必要に応じて設定されていない(React、Hooks)
- 期待される結果として状態を反応させるために以下をマッピングする方法
私は
&.active
に特に熱心ではありません ルーターに依存しないスタイル化されたコンポーネントを構築しようとしている場合のアプローチなので、asNavLink
を作成しました これに対処するには:npm install as-nav-link --save
与えられたコンポーネント:
次のように使用できます。
そして、アクティブなプロップをスタイル付きコンポーネントに渡します。
config
オプションであり、isActive
を含めることができます 関数(ReactRouterのNavLinkによる)およびactiveProp
文字列(コンポーネントに渡される支柱名)。