Next

next13 댓글 불러오기 - 2.2var

하림회사 2023. 7. 25. 20:16

강의용 코드 

코멘트 컴포넌트

'use client'
import { useEffect, useState } from 'react';


const Comment = ({itemId,email}:any) => {
    const [comment, setComment] = useState('')
    const [reply, setReply]:any = useState([])

    useEffect(() => {//공부용 자체 코드에서 강의용 코드로 바뀐것 
        fetch(`/api/comment/list?id=${itemId}`).then(r=>r.json())
        .then((result)=>{
            setReply(result)
        })
    }, [itemId])
    
    const handleCommentSubmit = () => {
        const noSpacesComment = comment.replace(/\s/g, ''); // 입력한 문자열에서 모든 공백을 제거
        if(noSpacesComment == '') return alert('댓글을 작성하세요.')


        fetch('/api/post/comment', {
          method: 'POST',
          body: JSON.stringify({ comment: comment, _id: itemId }),
        })
          .then((r):any => {
            if (r.status === 401) return alert('로그인해주세요');
            // 댓글 전송 후 댓글 데이터를 다시 가져와서 화면을 갱신 아래 replyNum 중요.
            return fetch(`/api/comment/list?id=${itemId}`, {
              method: 'GET',
            });
          })
          .then((response) => response.json())
          .then((data) => {
            setReply(data);
            setComment(''); // 댓글 전송 후 입력란 초기화
          })
          .catch((error) => {
            console.error('Error:', error);
          });
      };

    return (
    <div>
        <div>
            <ul>
              
                {
                reply.length > 0 ?
                reply.map((item:any, index:any)=>(
                    <li key={index}><p>작성자 - {email}</p>{item.content}</li>
                )) : <p>댓글없음</p>
              }
            </ul>
        </div>
        <input value={comment} onChange={(e)=>{setComment(e.target.value)}}/>
        <button onClick={handleCommentSubmit}>댓글전송</button>
    </div>
    );
};

export default Comment;

api용 코드 추가.

공부용 코멘트 api 안에넣어서 불러오는게아니라

아예 새로운 api 파일을 만들어서 불러온다 comment api 폴더 생성후 list.tsx api파일생성

import { connectDB } from '@/util/database';
import { ObjectId } from 'mongodb';

const list = async(요청:any,응답:any) => {
    let result = await (await connectDB).db("forum").collection('comment').find({parent:new ObjectId(요청.query.id)}).toArray();

    응답.status(200).json(result)
};

export default list;

이렇게 하니까 배열 끝에 '' 공백이없다.

내코드에서 api 에서 푸쉬를 한것이 원인인것같다.