• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 get 요청한 데이터로 state 변경 시 빈 어레이가 되는 문제

get 요청한 데이터로 state 변경 시 빈 어레이가 되는 문제

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 글쓴이
  • #49077

    김지우
    참가자
    안녕하세요 선생님 다름이아니라
    리뷰 기능을 만들고 있습니다. post 요청으로 별점점수와 리뷰내용을 db에 올리는 것 까진 잘 작동합니다.
    그런데 아래와 같이 useEffect 로 axios.get 요청을 하면
    
    const [서버리뷰, 서버리뷰변경] = useState([]);
    useEffect(() => {
    axios.get("/getReview").then((result) => {
    console.log(result.data);
    서버리뷰변경([...result.data]);
    console.log(서버리뷰);
    })
    }, []);
    
    콘솔에서는 141번째 줄인 console.log(result.data) 는 잘 불러오지만
    서버리뷰변경() 이후에 서버리뷰 state 는 이렇게 다시 빈 어레이가 되고 맙니다.
    [{_id: 3, 점수: 100, 내용: "ㅎㅇㅎㅇ"}] (1) (Detail.js: 141)
    [] (0) (Detail.js: 143)
    
    그래서 아래의 서버리뷰카드도 0번 째 리뷰라는 제목과 빈 내용밖에 뜨지 않습니다.
    
    {서버리뷰.map((a,i)=>{ return <div className="product-box p-4 m-1">
     <Rating size={30} readonly={true} rating={서버리뷰[i].점수}
    />
     <Card className="mt-3">
     <Card.Body>
     <Card.Title>{i} 번째 리뷰</Card.Title>
     <Card.Text>
     {서버리뷰[i][1]}
     </Card.Text>
     </Card.Body>
     </Card>
     </div>})}
    
    아래는 server.js 코드 입니다. 무엇이 잘못된 것일까요?
    
    app.post('/review', function(요청, 응답){
     db.collection('ReviewCount').findOne({name : '게시물개수'}, function(에러, 결과){
    var 총게시물개수 = 결과.totalPost;
     db.collection('ReviewCount').updateOne( {name : '게시물개수' } , { $inc : { totalPost : 1 } } , function(에러, 결과){
     db.collection('Review').insertOne( { _id : (총게시물개수 + 1), 점수 : 요청.body[0], 내용 : 요청.body[1], } , function(){
     응답.send('전송완료');
     });
     })
     });
    });
    app.get('/getReview', function(요청, 응답){
     db.collection('Review').find().toArray(function(에러, 결과){
     console.log(결과);
     응답.json(결과);
     });
    });
    #49177

    codingapple
    키 마스터
    원래 state변경함수는 늦게처리되어서 그 다음줄 먼저 실행합니다
    #49450

    김지우
    참가자
    아아 그렇군요 콘솔에서만 문제가 있는거군요 해결했습니다! 감사합니다!
3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠