안녕하세요 선생님 다름이아니라
리뷰 기능을 만들고 있습니다. 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(결과);
});
});