React와 Firebase, Ant Design을 이용한 FAQ 만드는 법
import React, { useEffect, useState } from 'react';
import { Collapse } from 'antd';
import { auth, db } from '../firebase/firebaseConfig';
import { collection, getDocs, query, where } from 'firebase/firestore';
const CustomerFaq = () => {
  const [faqs, setFaqs] = useState([]);
  const [activeKey, setActiveKey] = useState(null);
  const userUid = auth.currentUser?.uid;
  useEffect(() => {
    const fetchData = async () => {
      if (userUid) {
        const q = query(
          collection(db, 'template'),
          where('userId', '==', userUid),
        );
        const querySnapshot = await getDocs(q);
        const fetchedFaqs = querySnapshot.docs.map((doc) => ({
          id: doc.id,
          ...doc.data(),
        }));
        for (let i = 0; i < fetchedFaqs.length; i++) {
          if (fetchedFaqs[i].faqs.length > 0) {
            setActiveKey(fetchedFaqs[i].faqs[0].faqId);
            break;
          }
        }
        setFaqs(fetchedFaqs);
      }
    };
    fetchData();
  }, [userUid]);
  // faq 데이터를 items 형식으로 변환
  const items = faqs.flatMap((faq) =>
    faq.faqs.map((innerFaq) => ({
      key: innerFaq.faqId,
      label: innerFaq.question,
      children: <p>{innerFaq.answer}</p>,
    })),
  );
  return (
    <>
      <Collapse activeKey={activeKey} onChange={setActiveKey} accordion>
         {items.map((item) => (
           <Collapse.Panel header={item.label} key={item.key}>
             {item.children}
           </Collapse.Panel>
         ))}
       </Collapse>
     </>
   );
};
export default CustomerFaq;먼저 현재 로그인한 사용자의 uid를 가져와서 이 uid를 이용하여 Firebase에서 해당 사용자가 작성한 FAQ 목록을 가져온다.
이후에는 가져온 FAQ 데이터를 Ant Design의 Collapse 컴포넌트가 사용할 수 있는 형태로 변환하고, 화면에 표시해준다.