Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Classe adicionada está como undefined

Eu não estou encontrando a diferença em relação ao código do instrutor, mas no meu a classe adicionada está dando undefined.

import styles from './Cardapio.module.scss';
import { ReactComponent as Logo } from "assets/logo.svg";
import Buscador from './Buscador';
import { useState } from 'react';
import Filtros from './Filtros';

export default function Cardapio() {
    const [busca, setBusca] = useState("");
    const [filtro, setFiltro] = useState<number | null>(null)
    return (
        <main>
            <nav className={styles.menu}>
                <Logo />
            </nav>
            <header className={styles.header}>
                <div className={styles.header__text}>A casa do código e da massa 
                </div>
            </header>
            <section className={styles.cardapio}>
                <h3 className={styles.cardapio__titulo}>Cardápio</h3>
                <Buscador
                    busca={busca}
                    setBusca={setBusca}
                />
                <div className={styles.cardapio__filtros}>
                    <Filtros
                        filtro={filtro}
                        setFiltro={setFiltro}
                    />
                </div>
            </section>
        </main>
    )
}
import React from 'react';
import filtros from './filtros.json';
import styles from './Filtros.module.scss';
import classNames from 'classnames';

type IOpcao = typeof filtros[0];

interface Props {
    filtro: number | null
    setFiltro: React.Dispatch<React.SetStateAction<number | null>>
}

export default function Filtros({ filtro, setFiltro }: Props) {
    function selecionarFiltro(opcao: IOpcao) {
        if(filtro === opcao.id) return setFiltro(null);
        return setFiltro(opcao.id);
    }
    return(
        <div className={styles.filtros}>
            {filtros.map((opcao) => (
                <button 
                    className={classNames({
                        [styles.filtros__filtro]: true,
                        [styles['filtos__filtro--ativo']]: filtro === opcao.id
                    })} 
                    key={opcao.id} 
                    onClick={() => selecionarFiltro(opcao)}
                >
                    {opcao.label}
                </button>
            ))}
        </div>
    )
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Olá. Alguém consegue me ajudar com esse?

Descobri que a lógica toda está funcionando, o problema está nessa parte aqui:

styles['filtos__filtro--ativo']

Se eu troco essa classe por, por exemplo, styles.filtros, ele adiciona a classe corretamente. Mas se eu coloco styles['filtos__filtro--ativo'], ele adiciona undefined. Qual é o motivo?

solução!

Oi Cassiano, tudo bem?

Desculpe a demora em retornar.

Pelo que entendi, você está tendo um problema ao adicionar uma classe específica em seu código. O problema ocorre quando você tenta adicionar a classe "filtos__filtro--ativo" usando a notação de colchetes com a variável "styles". Quando isso acontece, o React retorna undefined no lugar da classe correta.

O motivo provável para esse erro é que a classe "filtos__filtro--ativo" está com um erro de digitação. Sem o R em filtros.

Faça a correção e veja se funciona.

Um abraço e bons estudos.