Компонент NavLink
Если вы хотите добавить активное
состояние вашим ссылкам, вы можете использовать это решение.
Компонент NavLink расширяет возможности компонента Qwik <Link>
, добавляя в него:
- Активный статус: Применяет класс, когда ссылка href совпадает с текущим именем URL.
Это позволяет стилизовать активное состояние навигации.
Как это работает
Под капотом NavLink использует хук useLocation
для получения статуса навигации. Он проверяет, совпадает ли href ссылки с текущим URL, чтобы установить activeClass. Это позволяет NavLink автоматически определять активное состояние в зависимости от навигации.
import { Slot, component$ } from '@builder.io/qwik';
import { Link, useLocation, type LinkProps } from '@builder.io/qwik-city';
type NavLinkProps = LinkProps & { activeClass?: string };
export const NavLink = component$(
({ activeClass, ...props }: NavLinkProps) => {
const location = useLocation();
const toPathname = props.href ?? '';
const locationPathname = location.url.pathname;
const startSlashPosition =
toPathname !== '/' && toPathname.startsWith('/')
? toPathname.length - 1
: toPathname.length;
const endSlashPosition =
toPathname !== '/' && toPathname.endsWith('/')
? toPathname.length - 1
: toPathname.length;
const isActive =
locationPathname === toPathname ||
(locationPathname.endsWith(toPathname) &&
(locationPathname.charAt(endSlashPosition) === '/' ||
locationPathname.charAt(startSlashPosition) === '/'));
return (
<Link
{...props}
class={`${props.class || ''} ${isActive ? activeClass : ''}`}
>
<Slot />
</Link>
);
}
);
Использование
Вы можете использовать NavLink с добавлением свойства activeClass
:
import { component$ } from '@builder.io/qwik';
import { NavLink } from '..';
export default component$(() => {
return (
<>
Ссылки
<div>
<NavLink href="/docs" activeClass="text-green-600">
/docs
</NavLink>
</div>
<div>
<NavLink
href="/demo/cookbook/nav-link/example/"
activeClass="text-green-600"
>
/demo/cookbook/nav-link/example/
</NavLink>
</div>
</>
);
});
Tailwind
Если вы используете Tailwind CSS, обязательно отредактируйте файл конфигурации tailwind и добавьте important=true
в экспорт, затем добавьте !
перед CSS-классами, где вы используете activeClass="!text-green-600"
, чтобы сделать их важными, когда ссылка активна.