Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Tem outra forma de adicionar classes?

Vi a aula inteira e no video o professor fez esse codigo:

function MenuLink({to, children}) {
    const Localização = useLocation();
    return(
        <Link className={`
            ${styles.link} 
            ${Localização.pathname === to ? styles.linkAtivo : ""}
        `} to={to}>
            {children}
         </Link>
     )
}

ele colocou o javascript direto no proprio codigo, mas queria saber tem alguma forma de poder fazer o msm efeito mas usando o javascript separado com o if() e outros comandos

1 resposta
solução!

Oi, Carlos, tudo bem?

Sim, é possível escrever código JavaScript mais independente para definir o nome de uma classe. Vou considerar como exemplo o componente que você enviou:

        <Link className={`
            ${styles.link} 
            ${localizacao.pathname === to ? styles.linkAtivo : ""}
        `} to={to}>
            {children}
         </Link>

Quando estamos no JSX, não conseguimos utilizar estruturas do JS como if e for, mas conseguimos utilizar expressões e operadores, por isso no React é tão comum o uso de operadores ternários e a função map de arrays.

Mas para conseguir utilizar estruturas mais complexas do JS, em vez de escrever localizacao.pathname === to ? styles.linkAtivo : "" diretamente para a classe, você pode criar uma função no mesmo arquivo que realiza essa verificação. Dentro do componente MenuLink, crie uma função como a seguir:

function defineEstilo(destinoDoLink) {
    return localizacao.pathname === destinoDoLink ? styles.linkAtivo : "";
}

E agora o código do componente Link fica assim:

        <Link className={`
            ${styles.link} 
            ${defineEstilo(to)}
        `} to={to}>
            {children}
         </Link>

Note que precisamos passar o parâmetro to para a função defineEstilo para que a função consiga retornar o valor correto. Agora, com uma função separada, você pode escrever lógicas mais complexas e outras estruturas do JS.

No entanto, é sempre importante você refletir a necessidade criar funções JS separadas. Se utilizar o JS diretamente nos componentes for uma forma mais simples e produtiva de alcançar o mesmo resultado, pode ser interessante manter essa solução.

Por outro lado, criar funções JS separadas pode trazer algumas vantagens em determinadas situações, como reaproveitamento de código.

Espero ter ajudado! Abraços e bons estudos :)