왼쪽 메뉴바에서 톱니바퀴를 클릭하고, 프로젝트 설정에 들어가면
이런 코드가 나오는데 저기서firebaseConfig
내용을 복사한다.
firebase.js
이름의 파일을 하나 만들고import firebase from 'firebase'; var firebaseConfig = { ... }; firebase.initializeApp(firebaseConfig); export default firebase;
이렇게 작성 한다.
그리고
firebase
를 사용할 파일에서import firebase from './FireBase';
를 추가한다.
user
와age
정보를 입력해서 생성하게 만들었다.const FirebaseDB = () => { const [datas, setDatas] = useState([]); const [user, setUser] = useState(''); const [age, setAge] = useState(''); const userRef = firebase.database().ref('users'); const onChange = (e) => { e.target.name === 'user' ? setUser(e.target.value) : setAge(e.target.value); } const onClickAdd = () => { const userData = { user, age }; userRef.push(userData); setUser(''); setAge(''); } return ( <div> <input onChange={onChange} name='user' placeholder='user' value={user}></input> <input onChange={onChange} name='age' placeholder='age' value={age}></input> <button onClick={onClick}>추가하기</button> </div> ); }; export default FirebaseDB;
firebase
와 연동하는 작업을 먼저 한다.
firebase.database().ref()
를 사용하는데firebase
가NoSQL
기반이라ref()
의 괄호 안에는collection
이름을 써주면 된다.
... useEffect(() => { userRef.on('value', snapshot => { const users = snapshot.val(); const usersData = []; for(let id in users) { usersData.push({ ...users[id], id }); } setDatas(usersData); }) }, []); ... return ( <div> {datas?.map(data => <div key={data.id}> <div> 이름: {data.user} <br /> 나이: {data.age} </div> <button onClick={() => onUpdate(data.id)}>수정</button> <button onClick={() => onClickRemove(data.id)}>삭제</button> <hr /> </div> )} ...
on()
을 이용해서 데이터들을 가져와state
에 넣는다.
데이터를 추가할 때 임의의id
가 부여되는데 이것으로 나중에수정
,삭제
를 하기 위해
그id
값도 불러올 때 추가해서 넣어주었다.
그리고map()
으로 데이터들을 간단하게 표시한다.
수정
과삭제
버튼을 미리 만들어 놓았다.
... const onUpdate = (id) => { const [user] = datas.filter(el => el.id === id); userRef.child(id).update({ age: user.age++ }); setDatas(datas.map(el => el.id === id ? {...el, age: el.age++} : el)); }; ...
특정 값을
업데이트
하기 위해id
를 인자로 받아서 해당 객체를user
에 할당하고,
update()
를 이용해 특정id
의 내부값만 바꿔준다.
state
도 같이 바꿔줘주지 않으면 제대로 동작하지 않는다.
... const onClickRemove = (id) => { userRef.child(id).remove(); } ...
삭제
도id
를 인자로 받아서remove()
만 호출해주면 된다.
import React, { useEffect, useState } from 'react'; import firebase from './FireBase'; const FirebaseDB = () => { const [datas, setDatas] = useState([]); const [user, setUser] = useState(''); const [age, setAge] = useState(''); const userRef = firebase.database().ref('users'); useEffect(() => { userRef.on('value', snapshot => { const users = snapshot.val(); const usersData = []; for(let id in users) { usersData.push({ ...users[id], id }); } setDatas(usersData); }) }, []); const onChange = (e) => { e.target.name === 'user' ? setUser(e.target.value) : setAge(e.target.value); } const onClickAdd = () => { const userData = { user, age }; userRef.push(userData); setUser(''); setAge(''); } const onClickRemove = (id) => { userRef.child(id).remove(); } const onUpdate = (id) => { const [user] = datas.filter(el => el.id === id); userRef.child(id).update({ age: user.age++ }); setDatas(datas.map(el => el.id === id ? {...el, age: el.age++} : el)); }; return ( <div> {datas?.map(data => <div key={data.id}> <div> 이름: {data.user} <br /> 나이: {data.age} </div> <button onClick={() => onUpdate(data.id)}>수정</button> <button onClick={() => onClickRemove(data.id)}>삭제</button> <hr /> </div> )} <input onChange={onChange} name='user' placeholder='user' value={user}></input> <input onChange={onChange} name='age' placeholder='age' value={age}></input> <button onClick={onClickAdd}>추가하기</button> </div> ); }; export default FirebaseDB;