게시글의 내용을 조회하는 기능은 게시글 목록 컴포넌트에서 글의 id값을 url의 param으로 넘겨주는 것을 바탕으로 시작한다.
const { id } = useParams();
페이지가 처음 렌더링 되면, 이 id값을 인자로 게시글의 내용을 조회하는 함수를 호출한다. 데이터가 정상적으로 반환되어 오면 컴포넌트는 리렌더링되어 글의 내용을 출력하게 된다.
const { getDocument, deleteDocument, downloadFile, response } = useFirestore('questions');
useEffect(() => {
const titleElement = document.getElementsByTagName('title')[0];
titleElement.innerHTML = '공부기록';
getDocument(id);
getComments(id);
// eslint-disable-next-line
}, []);
글의 내용을 수정하는 것과, 삭제하는 것도 글을 조회하는 기능과 마찬가지로 넘겨받은 id param를 바탕으로 이루어 진다.
const onUpdate = () => {
navigate(`/texteditor/qs/${id}`);
};
const onDelete = () => {
deleteDocument(id, 'qs');
};
const getDocument = async (docid) => {
dispatch({ type: 'isPending' });
try {
const docRef = doc(colRef, docid);
const docSnap = await getDoc(docRef);
dispatch({ type: 'getDoc', payload: docSnap.data() });
}
catch (error) {
dispatch({ type: 'error', payload: error.message });
alert(error.message);
}
};
게시글 조회 기능은 목록 조회와 달리 단 하나의 데이터 문서를 가져오면 된다. getDoc 함수를 사용하고, 데이터가 하나뿐이므로 배열의 형태도 아니고 map 함수를 사용할 필요도 없다. 게시글 삭제 기능은 deleteDoc 함수를 사용하기만 하면 된다.
좋은 글 잘 읽었습니다, 감사합니다.