Frontend 프론트엔드
[ 38 ] 페이지네이션-1
박민우_
2024. 6. 29. 18:34
graphQL 의 refetch 복습정리
1. Mutation 이후 refetch 하기
// 쿼리문
const FETCH_BOARDS = gql`
query {
fetchBoards {
number
writer
title
contents
}
}
`;
const DELETE_BOARD = gql`
mutation deleteBoard($number: Int) {
deleteBoard(number: $number) {
message
}
}
`;
const [deleteBoard] = useMutation(DELETE_BOARD);
const onClickDelete = async (e) => {
const result = await deleteBoard({
variables: {
number: Number(e.target.id),
},
refetchQueries: [{ query: FETCH_BOARDS }],
});
console.log(result.data.deleteBoard.message);
};
2. Query 이후 refetch 하기
// 쿼리문
const FETCH_BOARDS = gql`
query fetchBoards($page: Int) {
fetchBoards(page: $page) {
_id
writer
title
contents
}
}
`;
const { data, refetch } = useQuery<
Pick<IQuery, "fetchBoards">,
IQueryFetchBoardsArgs
>(FETCH_BOARDS);
const onClickPage = (e: MouseEvent<HTMLSpanElement>): void => {
refetch({ page: Number(e.currentTarget.id) });
};
페이지 번호 표시하기
리팩토링 전
const onClickPage = (e: MouseEvent<HTMLSpanElement>): void => {
refetch({ page: Number(e.currentTarget.id) });
};
return(
{[1, 2, 3, 4, 5, 6].map((el) => {
return (
<span key={el} id={String(el)} onClick={onClickPage}>
{el}
</span>
);
})}
)
리팩토링 후
const onClickPage = (e: MouseEvent<HTMLSpanElement>): void => {
refetch({ page: Number(e.currentTarget.id) });
};
return(
{new Array(10).fill(1).map((_, index) => {
return (
<span key={index + 1} id={String(index + 1)} onClick={onClickPage}>
{index + 1}
</span>
);
})}
)
728x90