라고 오류가 뜹니다.
콘솔로 mainPosts 찍어보니 saga에서 보내주는 구조로 data값이 전달되는것을 확인했습니다.
그래서 cttf 라는 변수에 content만 담아서 map으로 리턴 시켜주려 했는데 여전히 타입에러 오류메세지가 떠요..
자식컴포넌트:<ContentForm>을 map으로 리턴해주려 하고 있습니다.
컴포넌트 코드 입니다.
const UploadForm = ({gpost}) => {
const dispatch = useDispatch();
const [text, setText ] = useState('');
const { isAddingPost, postAdded, mainPosts, imagePaths } = useSelector(state => state.post);
const imageInput = useRef();
// 게시물 로드하기
// useEffect(() => {
// dispatch({
// type: LOAD_MAIN_POSTS_REQUEST,
// data: gpost.id,
// });
// }, []);
useEffect(() => {
setText('');
},[postAdded === true]);
const onSubmitForm = useCallback((e) => {
e.preventDefault();
if (!text || !text.trim()) {
return alert('게시글을 작성하세요.');
}
const formData = new FormData();
imagePaths.forEach((i) => {
formData.append('image', i);
});
formData.append('content', text);
formData.append('GpostId', gpost.id);
dispatch({
type: ADD_POST_REQUEST,
data: formData,
});
}, [text, imagePaths, gpost.id]);
// 이미지업로드
const onChangeImages = useCallback((e) => {
console.log(e.target.files);
const imageFormData = new FormData();
[].forEach.call(e.target.files, (f) => {
imageFormData.append('image', f);
});
dispatch({
type: UPLOAD_IMAGES_REQUEST,
data: imageFormData,
});
}, []);
var cttf;
return (
<div>
<form>부분
{/* 게시물올라가는부분 */}
<div className="letsbegin">
<div>
{(()=>{
console.log("mainPosts : ",mainPosts);
cttf = mainPosts.content;
cttf.map((i)=>{
<ContentForm key={i} post={i} />
});
})()}
{/* {mainPosts.map((i)=>{
return(
<ContentForm key={i} post={i} />
);
})} */}
</div>
</div>
</div>
);
};
UploadForm.propTypes={
gpost: PropTypes.shape({
User: PropTypes.object,
title: PropTypes.string,
}),
};
export default UploadForm;
const ContentForm = ({post}) => {
const [commentFormOpened, setCommentFormOpened] = useState(false);
const [commentText, setCommentText ] = useState('');
const { me } = useSelector(state => state.user);
const { commentAdded, isAddingComment } = useSelector(state => state.post);
const dispatch = useDispatch();
const liked = me && post.Likers && post.Likers.find(v => v.id === me.id);
//댓글창토글
const onToggleComment = useCallback(() => {
setCommentFormOpened(prev => !prev);
if (!commentFormOpened) {
// 댓글창 켤때 불러오기
dispatch({
type: LOAD_COMMENTS_REQUEST,
data: post.id,
});
}
}, []);
// 댓글
const onChangeComment = useCallback((e) => {
setCommentText(e.target.value);
}, []);
// 댓글올리기 사이클
const onSubmitComment = useCallback((e) => {
e.preventDefault();
if(!me){
return alert('로그인이 필요합니다.');
}
return dispatch({
type: ADD_COMMENT_REQUEST,
data:{
PostId: post.id,
content: commentText,
},
});
}, [me && me.id, commentText]);
// 댓글 성공시, 빈텍스트로
useEffect(() => {
setCommentText('');
},[commentAdded === true]);
// 댓글삭제하기
const onRemoveComments = useCallback(userId => () => {
alert('댓글을 삭제하시겠습니까?');
// console.log("포스트아이디",me.id, post.User.id)
if(me.id === post.User.id)
dispatch({
type: REMOVE_COMMENT_REQUEST,
data: userId,
});
});
// 댓글 변수선언
var listIndex;
// 게시글 삭제
const onRemovePost = useCallback(userId => () => {
// console.log("포스트아이디",me.id, post.User.id)
if(me.id === post.User.id)
alert('게시물을 삭제하시겠습니까?');
dispatch({
type: REMOVE_POST_REQUEST,
data: userId,
});
if(me.id !== post.User.id)
alert('다른 사용자의 게시물은 삭제할 수 없습니다.');
});
// 좋아요 토글
const onToggleLike = useCallback(() => {
if (!me) {
return alert('로그인이 필요합니다!');
}
if (liked) { // 좋아요 누른 상태
dispatch({
type: UNLIKE_POST_REQUEST,
data: post.id,
});
} else { // 좋아요 안 누른 상태
dispatch({
type: LIKE_POST_REQUEST,
data: post.id,
});
}
}, [me && me.id, post && post.id, liked]);
return(
<>
<div className="postbox">
<div className="contBox">
<p>{post.User.nickname} 님의 게시물 - 좋아요 : {post.Likers.length } </p>
<PostImages images={post.Images} />
<div>{post.content}</div>
</div>
<div className="btnsbox">
<button type="button" className="commentBtn" value={commentFormOpened} onClick={onToggleComment} />
{ liked ? <button type="button" className="likeBtnred" onClick={onToggleLike} /> :
<button type="button" className="likeBtnline" onClick={onToggleLike} /> }
<button type="button" className="removeBtn" onClick={onRemovePost(post.id)} />
{commentFormOpened===true &&
<form className="commentbox" onSubmit={onSubmitComment}>
<textarea className="comment" value={commentText} onChange={onChangeComment} />
<button type="primary" htmlType="submit" className="combtn" loading={isAddingComment} >COMMENT</button>
</form>
}
{/* 댓글올라갈부분 */}
{commentFormOpened===true && (
<div style={{display:"inline-block", width:"100%"}}>
<p style={{marginLeft:"10px"}}>{commentAdded ? '댓글' + post.Comments.length : '댓글'+ '0'}</p>
<div className="comline"></div>
{(()=>{
if(post.Comments){
// console.log(post.Comments[0])
listIndex = post.Comments.map((el)=>
(
<li style={{listStyle:"none", display:"inline-block", clear:"both"}} >
{el.User.nickname} : {el.content}
{ el.User.id === me.id ?
<button type="button" className="remove" onClick={onRemoveComments(post.id)} > REMOVE </button>
: "" }
</li>
)
)
}
return(
<ul>
{listIndex}
</ul>
);
})()}
</div>
)
}
</div>
</div>
</>
);
};
ContentForm.propTypes={
post: PropTypes.shape({
User: PropTypes.object,
content: PropTypes.string,
createdAt: PropTypes.string,
}),
};
export default ContentForm;