Выделение активной ссылки в React Router

Предположим, мы добавили несколько продуктов в наше приложение и просматриваем каждый из продуктов. Как же нам понять на страничке какого продукта мы сейчас находимся? Давайте будем выделять этот продукт в списке, например жирным шрифтом и коричневым цветом, а если ссылочка еще одгружается, то серым.

Для начала зайдите на главную страницу, добавьте в список 4 продукта и для каждого из них внесите данные. Дайте им любые названия.

В выделении активной ссылки нам поможет компонент NavLink, это подвид компонента Link, который знает о состоянии данных. Обычно он применяется при создании навигационного меню.

Давайте откроем root.jsx и импортируем NavLink (не забудьте убрать импорт Link, а то React может заругаться, ведь мы его больше не используем):

import NavLink from 'react-router-dom';

Затем в макете заменим компонент Link на NavLink:

<NavLink key={product.id} to={`products/${product.id}`}> {product.name ? product.name : <i>unnamed</i>} </NavLink>

И добавим ему пропс className, а также используем условную логику. Если страничка подгрузилась, то ссылка перейдет в состояние активной, если прогружается, то в состояние загрузки, если же ничего не происходит, то останется прежней. В зависимости от этого будет меняться класс ссылки:

<NavLink key={product.id} to={`products/${product.id}`} className={({ isActive, isPending }) => isActive ? 'active' : isPending ? 'loading' : '' } > {product.name ? product.name : <i>Unnamed</i>} </NavLink>

Нам осталось добавить стилей для active и loading классов в наш css-файл:

a.active { font-weight: bold; color: brown; } a.loading { color: gray; }

Готово! А теперь покликайте на продукты в списке.

Возьмите приложение, созданное вами в заданиях к прошлым урокам. Пользуясь материалами урока, реализуйте в нем выделение активной ссылки для списка студентов так, чтобы было понятно данные какого студента юзер сейчас просматривает.



Чат с GPT Компилятор