How do I alter this JS so it works inside of a react component? When I add an onClick handler to the span button I get "cannot read property classList of undefined". This was JS taken out of a non react project so I understand that I'm probably not doing this as best practice, but need the direction to make it work.
Here is my code.
import React from "react"
const Faq = () => {
const toggleFAQ = function(question) {
if( question.parentElement.classList.contains('is-opened') ) {
question.parentElement.classList.remove('is-opened');
} else {
question.parentElement.classList.add('is-opened');
}
}
if( document.querySelector('.faq') !== null ) {
const questions = Array.from( document.getElementsByClassName('faq__question') );
questions[0].parentElement.classList.add('is-opened');
questions.forEach((question) => {
question.addEventListener('click', (e) => toggleFAQ(question));
})
}
return (
<>
<section className="faq">
<div className="faq__inner">
<h2 className="faq__title">Frequently Asked Questions</h2>
<ul className="faq__list">
<li className="faq__item">
<h3 className="faq__question">
How do I make this work?
<span className="faq__question-btn" onClick={toggleFAQ}></span>
</h3>
<article className="faq__answer is-opened">
<div className="faq__answer-inner is-opened">
<p>
Lorem Ipsum
</p>
</div>
</article>
</li>
<li className="faq__item">
<h3 className="faq__question">
Help me, Lord?
<span className="faq__question-btn"></span>
</h3>
<article className="faq__answer">
<div className="faq__answer-inner">
<p>
You suck at JS
</p>
</div>
</article>
</li>
<li className="faq__item">
<h3 className="faq__question">
How does this work. Help?
<span className="faq__question-btn"></span>
</h3>
<article className="faq__answer">
<div className="faq__answer-inner">
<p>
Lorem Ipsum.
</p>
</div>
</article>
</li>
<li className="faq__item">
<h3 className="faq__question">
Lorem Ipsum?
<span className="faq__question-btn"></span>
</h3>
<article className="faq__answer">
<div className="faq__answer-inner">
<p>
Lorem ipsum
</p>
</div>
</article>
</li>
<li className="faq__item">
<h3 className="faq__question">
Lorem Ipsum?
<span className="faq__question-btn"></span>
</h3>
<article className="faq__answer">
<div className="faq__answer-inner">
<p>
Lorem Ipsum
</p>
</div>
</article>
</li>
</ul>
</div>
</section>
</>
)
}
export default Faq
Thanks in advance!
classListis being accessed, and include a set of reproduction steps? - Drew ReesetoggleFAQis theSyntheticEventobject passed by react, soquestionis not going to be your element hence why you get the error - Patrick Evans