2024-07-08
web
firebase Realtime Database의 json데이터를 편집하는 법을 알게 되었고, 프로젝트에 데이터를 갖다쓰는 법을 알게 되었다.
아래는 미래의 나를 위해 어떻게했는지 적어놓음
firebase.js
- firebase를 초기화한다.
initializeApp()
- 데이터베이스에 접근한다.
getDatabase()
→ export
databaseService.js
- 접근한 데이터베이스에
ref()
함수 사용해 레퍼런스를 얻는다. getTagData()
,getCardData()
함수를 정의한다. → exportexport const getTagData = async (tag) => { try { const snapshot = await get(child(dbRef, `tags`)); if (snapshot.exists()) { return snapshot.val(); } else { console.log("No data available"); return null; } } catch (error) { console.error(error); throw error; } };
App.js
getTagData()
,getCardData()
함수를 사용하여 tagData와 cardData를 set한다.useEffect(() => { const fetchData = async () => { try { const data = await getTagData(); setTagData(data); } catch(error) { console.error("Error fetching tag data:", error); } }; fetchData(); }, []);
- tagData를 사용해 체크박스가 포함된 버튼을 만든다
이때 객체 내 각 속성을 매핑하기 위해<section className={styles.tagSection}> {tagData && ( Object.keys(tagData).map((key) => ( <button key={key}> <label htmlFor={`checkbox-${key}`}>{tagData[key]}</label> <input type="checkbox" id={`checkbox-${key}`} onChange={() => handleChechbox(key)} /> </button> )) )} </section>
Object.keys()
메서드를 사용한다. 객체의 키를 배열로 가져온 후, 이 배열을 기반으로 반복 처리할 수 있다. - cardData를
Object.keys()
메서드를 사용해 속한 객체마다<Cards />
함수형 컴포넌트를 만들고 인자로 해당 객체를 넘겨준다.<section className={styles.cardSelection}> {cardData && ( Object.keys(cardData).map((key) => ( <Cards key={key} cardData={cardData[key]} /> )) )} </section>
Cards.js
-
매개변수를 중괄호 쳐서 객체로 받는다. 받은 객체를 분해하여 각 변수에 할당한다.
function Cards({cardData}) { const {type, img, name, name_link, note, note_link, tags } = cardData;
-
변수 ‘type’이 work인지 notes인지 논리연산자로 구분해
<Work />
또는<Notes />
컴포넌트를 만들고 인자로 값을 넘겨준다. -
위에서 사용한 메서드와 접근연산자를 잘 응용해 Work, Notes 컴포넌트에 데이터를 채워넣는다.
-
target: _parent
로 하여 부모 프레임에서 링크가 열리도록 했다.
Project: Obsidian Digital Garden