Как можно модифицировать компонент навбара с иконками в Next.js для активации ссылок?
Чтобы добавить CSS-класс к элементу в Next.js, вы можете воспользоваться стандартным способом добавления CSS-классов в React. Например, вы можете добавить класс напрямую к элементу или использовать условные операторы для добавления класса при определенных условиях. Пример добавления CSS-класса напрямую к элементу в Next.js: ```jsx const MyComponent = () => { return ( <div className="my-class">Hello, World!</div> ); }; ``` Пример использования условных операторов для добавления CSS-класса в зависимости от определенного условия: ```jsx const MyComponent = ({ isActive }) => { return ( <div className={isActive ? 'active-class' : 'inactive-class'}>Hello, World!</div> ); }; ``` Если вы хотите модифицировать компонент навбара с иконками для активации ссылок, вы можете добавить состояние для отслеживания активной ссылки и изменять соответствующий CSS-класс в зависимости от этого состояния. Пример модификации компонента навбара с иконками в Next.js для активации ссылок: ```jsx import { useState } from 'react'; import Link from 'next/link'; const Navbar = () => { const [activeLink, setActiveLink] = useState(null); return ( <nav> <ul> <li className={activeLink === 'home' ? 'active' : ''}> <Link href="/"> <a onClick={() => setActiveLink('home')}>Home</a> </Link> </li> <li className={activeLink === 'about' ? 'active' : ''}> <Link href="/about"> <a onClick={() => setActiveLink('about')}>About</a> </Link> </li> <li className={activeLink === 'contact' ? 'active' : ''}> <Link href="/contact"> <a onClick={() => setActiveLink('contact')}>Contact</a> </Link> </li> </ul> </nav> ); }; export default Navbar; ``` В данном примере при клике на ссылку активируется соответствующий CSS-класс для выделения активной ссылки. Вы можете изменить стили компонента навбара и задать класс `.active` для выделения активной ссылки в вашем CSS файле.
Примерно так:
https://www.npmjs.com/package/classnames{navLinks.map((link) => ( <Icon href={link.href} key={link.svgIcon} title={link.svgIcon} className={isCurrent ? `active` : undefined} /> ))} ... import classNames, { type Argument } from "classnames"; type Props = { title: string; href: string; className: Argument; } <Link href={props.href} className={classNames('svgh m-auto', props.className)> <SvgMail width="30" height="30" viewBox="0 0 50 50" /> </Link>
Как в обычном реакте:
const Icon = ({title, href, active}) => { const className = active ? 'active' : ''; return ( <Link href={href} className={`svgh m-auto ${className}`}> {/* svg */} </Link> ); }
'use client' import React, {useState, useEffect} from 'react'; import Icon from './icons/Icon'; const links = [ {href: '#home_anchor', svgIcon: 'home'}, {href: '#user_anchor', svgIcon: 'user'} // others ]; const Navbar = () => { const [activeLink, setActiveLink] = useState(''); useEffect(() => { const handleScroll = () => { // logic scroll } // add anchor window.addEventListener('scroll', handleScroll); // remove anchor from unmount return () => window.removeEventListener('scroll', handleScroll) }, []); return ( <nav className="flex flex-col fixed bg-gray-800 align-center"> {links.map((l) => ( <Icon href={l.href} key={l.svgIcon} title={l.svgIcon} active={activeLink === l.href}/> ))} </nav> ); }