popover
343
작성한 질문수 29
안녕하세요 제로초님...예제를 조금 변형해 PostCard 를 만드는 작업을 하는 도중에 문제가 생겨서 남깁니다.
기존 action요소 에 있던 <EllipsisOutlined />를
extra로 옮기면서 작업하는 도중에 Popover를 사용할 경우에
무한 콜스택으로 들어가는 문제가 생겼습니다. ㅜㅜ
그래서 Popover를 감싸지 않고 <EllipsisOutlined />를 사용해서 onClick으로 출력 해준 결과에는 잘 작동하는 것을 보였습니다. 어떤게 문제인가요? ㅜㅜPopover가 제가 모르는 다른 call을하는건지
1번코드 사진

2번코드 사진
//1번째 코드
import react, { useState, useCallback } from 'react';
import { Card, Popover, Button, List, Comment, Avatar, Skeleton } from 'antd';
import { useSelector } from 'react-redux';
import { RetweetOutlined, HeartOutlined, MessageOutlined, ShareAltOutlined, EllipsisOutlined } from '@ant-design/icons';
import PostImage from './PostImage';
import CommentForm from './CommentForm';
import PropTypes from 'prop-types';
const POSTCARD = ({ post }) => {
console.log(post.User.id);
const { me } = useSelector(state => state.user);
const [commentOpen, setCommentOpened] = useState(false);
const id = me && me.id;
console.log(me);
console.log(id);
const onClickRetWeet = useCallback(
() => {
},
[],
)
const onClickHeart = useCallback(
() => {
},
[],
)
const onClickComment = useCallback(
() => {
setCommentOpened((pre) => (!pre));
},
[],
)
const onClickShared = useCallback(
() => {
},
[],
)
const onClickmore = useCallback(
() => {
console.log("click more");
},
[],
)
return (
<>
<Card
cover={post.Images[0] && <PostImage images={post.Images} />}
actions={[
<RetweetOutlined key="retweet" onClick={onClickRetWeet} />,
<HeartOutlined key="edit" onClick={onClickHeart} />,
<MessageOutlined key="message" onClick={onClickComment} />,
<ShareAltOutlined key="shared" onClick={onClickShared} />,
]}
extra={
// <Popover trigger="click"
// content={(
// <Button.Group>
// {id && id === post.User.id ?
// <> <Button>수정</Button> <Button>삭제</Button></>
// :
// <>< Button>신고 </Button></>}
// </Button.Group>
// )}
// >
// <EllipsisOutlined />
// </Popover>}
<EllipsisOutlined onClick={onClickmore}/>
}
>
<Card.Meta
avatar={<Avatar>{post.User.nickname[0]}</Avatar>}
title={post.User.nickname}
description={post.content}
/>
</Card >
{commentOpen && (
<>
<Card >
<CommentForm post={post} />
<List style={{ marginTop: "20px" }}
header={`${post.Comments.length}개의 댓글`}
itemLayout="horizontal"
dataSource={post.Comments}
renderItem={item => (
<List.Item
actions={[<a key="list-loadmore-edit">edit</a>, <a key="list-loadmore-more">more</a>]}
>
<Skeleton avatar title={false} loading={item.loading} active>
<List.Item.Meta
avatar={
<Avatar>{item.User.nickname[0]}</Avatar>
}
title={item.User.nickname}
description={item.content}
/>
</Skeleton>
</List.Item>
)}
/>
</Card>
</>
)}
</>
)
}
POSTCARD.PropTypes = {
post:PropTypes.shape({
id: PropTypes.number,
User: PropTypes.object,
Comments: PropTypes.arrayOf(PropTypes.any),
content: PropTypes.string,
Images: PropTypes.arrayOf(PropTypes.any),
imagePaths: PropTypes.arrayOf(PropTypes.any)
})
}
export default POSTCARD;
////2번째 코드
import react, { useState, useCallback } from 'react';
import { Card, Popover, Button, List, Comment, Avatar, Skeleton } from 'antd';
import { useSelector } from 'react-redux';
import { RetweetOutlined, HeartOutlined, MessageOutlined, ShareAltOutlined, EllipsisOutlined } from '@ant-design/icons';
import PostImage from './PostImage';
import CommentForm from './CommentForm';
import PropTypes from 'prop-types';
const POSTCARD = ({ post }) => {
console.log(post.User.id);
const { me } = useSelector(state => state.user);
const [commentOpen, setCommentOpened] = useState(false);
const id = me && me.id;
console.log(me);
console.log(id);
const onClickRetWeet = useCallback(
() => {
},
[],
)
const onClickHeart = useCallback(
() => {
},
[],
)
const onClickComment = useCallback(
() => {
setCommentOpened((pre) => (!pre));
},
[],
)
const onClickShared = useCallback(
() => {
},
[],
)
// const onClickmore = useCallback(
// () => {
// console.log("click more");
// },
// [],
// )
return (
<>
<Card
cover={post.Images[0] && <PostImage images={post.Images} />}
actions={[
<RetweetOutlined key="retweet" onClick={onClickRetWeet} />,
<HeartOutlined key="edit" onClick={onClickHeart} />,
<MessageOutlined key="message" onClick={onClickComment} />,
<ShareAltOutlined key="shared" onClick={onClickShared} />,
]}
extra={
<Popover trigger="click"
content={(
<Button.Group>
{id && id === post.User.id ?
<> <Button>수정</Button> <Button>삭제</Button></>
:
<>< Button>신고 </Button></>}
</Button.Group>
)}
>
<EllipsisOutlined />
</Popover>}
>
<Card.Meta
avatar={<Avatar>{post.User.nickname[0]}</Avatar>}
title={post.User.nickname}
description={post.content}
/>
</Card >
{commentOpen && (
<>
<Card >
<CommentForm post={post} />
<List style={{ marginTop: "20px" }}
header={`${post.Comments.length}개의 댓글`}
itemLayout="horizontal"
dataSource={post.Comments}
renderItem={item => (
<List.Item
actions={[<a key="list-loadmore-edit">edit</a>, <a key="list-loadmore-more">more</a>]}
>
<Skeleton avatar title={false} loading={item.loading} active>
<List.Item.Meta
avatar={
<Avatar>{item.User.nickname[0]}</Avatar>
}
title={item.User.nickname}
description={item.content}
/>
</Skeleton>
</List.Item>
)}
/>
</Card>
</>
)}
</>
)
}
POSTCARD.PropTypes = {
post:PropTypes.shape({
id: PropTypes.number,
User: PropTypes.object,
Comments: PropTypes.arrayOf(PropTypes.any),
content: PropTypes.string,
Images: PropTypes.arrayOf(PropTypes.any),
imagePaths: PropTypes.arrayOf(PropTypes.any)
})
}
export default POSTCARD;
답변 1
1
딱히 코드는 문제될게 없어보이는데 card extra와 popover 사용가능한지를 찾아봐야겠습니다.
이러한 에러를 해결할 때는 처음부터 extra에 모든 걸 넣지마시고 조금씩 넣어보세요.
넥스트 버젼 질문
0
77
2
로그인시 401 Unauthorized 오류가 뜹니다
0
89
1
무한 스크롤 중 스크롤 튐 현상
0
175
1
특정 페이지 접근을 막고 싶을 때
0
103
2
createGlobalStyle의 위치와 영향범위
0
96
2
인라인 스타일 리렌더링 관련
0
91
2
vsc 에서 npm init 설치시 오류
0
146
2
nextjs 15버전 사용 가능할까요?
0
158
1
화면 새로고침 문의
0
121
1
RTK에서 draft, state 차이가 있나요?
0
153
2
Next 14 사용해도 될까요?
0
452
1
next, node 버전 / 폴더 구조 질문 드립니다.
0
349
1
url 오류 질문있습니다
0
211
1
ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out
0
372
1
sudo certbot --nginx 에러
0
1274
2
Minified React error 콘솔에러 (hydrate)
0
470
1
카카오 공유했을 때 이전에 작성했던 글이 나오는 버그
0
247
1
프론트서버 배포 후 EADDRINUSE에러 발생
0
327
1
npm run build 에러
0
518
1
front 서버 npm run build 중에 발생한 에러들
0
381
1
서버 실행하고 브라우저로 들어갔을때 404에러
0
338
2
css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.
0
287
1
팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.
0
237
2
해시태그 검색에서 throttle에 관해 질문있습니다.
0
201
1





