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

[HELP] ReactJs (slider)

Boa noite! Meu código está dando erro: "Cannot read property 'classList' of undefined".

Botões

<button
                type="button"
                data-mdb-target="#carousel"
                data-mdb-slide="prev"
                onClick={() => { next(-1) }}
              >
                <span aria-hidden="true"> {ArrowLeft}</span>
                <span className="visually-hidden">Previous</span>
              </button>
              <button
                type="button"
                data-mdb-target="#carousel"
                data-mdb-slide="next"
                onClick={() => { next(1) }}
              >
                <span aria-hidden="true">{ArrowRight}</span>
                <span className="visually-hidden">Next</span>
</button>

A div onde eu quero exibir um item por vez a cada clique

 <div className="texto2">
          <div className="legenda">
            <h2>Alvarez $ Marshal 1</h2>
            <p>Noise can be energising but also disturb. It affects concentration, efficiency and productivity.</p>
          </div>
          <div className="legenda">
            <h2>Alvarez $ Marshal 2</h2>
            <p>Noise can be energising but also disturb. It affects concentration, efficiency and productivity.</p>
          </div>
          <div className="legenda">
            <h2>Alvarez $ Marshal 3</h2>
            <p>Noise can be energising but also disturb. It affects concentration, efficiency and productivity.</p>
          </div>
        </div>

E aqui está a função

var legendaIndex = 1;

function proxLegenda(n) {
  const legendas = document.getElementsByClassName("legenda-img");
  if (n > legendas.length) { legendaIndex = 1 }

  if (n < 1) { legendaIndex = legendas.length }

  for (let i = 0; i < legendas.length; i++) {
    legendas[i].classList.add("esconde");
  }
  legendas[legendaIndex - 1].classList.add("exibe")
}

function next(n) {
  proxLegenda(legendaIndex += n);
}

proxLegenda(legendaIndex);

Testei este codigo em JS puro e funcionou, então devo estar me passando em alguma coisa quando trago pro ambiente do React. Detalhe o erro é exatamente nesta linha :

legendas[legendaIndex - 1].classList.add("exibe");

O proprio intellisense vscode consegue identificar a prop "classList" mas quando roda, dá erro. No console também consigo capturar os elementos em questão, porém não consigo atribuir a classe.

Obrigado!

1 resposta
solução!

Fala ai Antonio, tudo bem? Quando tu usa React seria bom você fazer essa implementação utilizando o estado dos componentes e deixar a manipulação do DOM para o React realizar, existem bibliotecas prontas muito boas para lidar com slide e carousel, por exemplo: https://react-slick.neostack.com/

Espero ter ajudado.