const Feed = props => {
const { userName, thumbnail, likesCount, commentList } = props;
const [comment, setComment] = useState({
id: '',
userName: 'a.orazy_sudnics',
content: '',
isLiked: false,
});
props.작명
으로 써주지 않고 구조분해 할당을 해줘야 eslint 에러가 생기지 않는다.. const { userName, thumbnail, likesCount, commentList } = props;
그리고 댓글 컴포넌트의 초기값을 객체로 지정해주었다. const [commentsNewArray, setcommentsNewArray] = useState(commentList);
"commentList": [
{
"id": 1,
"userName": "wecode",
"content": "Welcome to world best coding bootcamp!",
"isLiked": true
},
{
"id": 2,
"userName": "1-2",
"content": "Hi there.",
"isLiked": false
},
{
"id": 3,
"userName": "1-3",
"content": "Hey.",
"isLiked": false
}
]
사용자의 입력을 받아 comment
의 state가 변경될 때마다 commentList
에 추가해줄 것이기 때문에 commentList를 state로 관리한다.
const handleChange = event => {
const { value } = event.target;
setComment(pre => ({ ...pre, content: value }));
};
const { value } = event.target;
객체 구조 분해 할당 기본 구조
var o = {p: 42, q: true};
var {p, q} = o;
console.log(p); // 42
console.log(q); // true
const handleSubmit = event => {
event.preventDefault();
if (comment.length < 1) {
return;
}
let idNumber = commentsNewArray.length + 1;
//console.log(commentsNewArray.length);
//console.log(idNumber);
const newComment = { ...comment, id: idNumber++ };
//console.log(newComment);
setcommentsNewArray(pre => [...pre, newComment]);
setComment(pre => ({ ...pre, content: '' }));
};
commentlist
데이터를 받아논 commentNewArray
의 length
에 +1 한 값을 comment 객체의 id값
에 부여하고 이를 변수화 시켜 newComment
에 할당한다. 새로 달리는 댓글마다 id 값이 증가할 수 있도록.newComment
를 setcommentsNewArray
변경함수를 통해 계속해서 리렌더링 진행.setComment
변경함수를 통해 content
부분이 빈 값이 될 수 있도록 리렌더링 진행.