Grace
grace's dev_note
Grace
전체 방문자
오늘
어제
  • 분류 전체보기
    • FrontEnd
      • Next.js
      • React
      • ReactNativ..
      • Vue
    • Javascript
      • 러닝 자바스크립트
      • 모던 자바스크립트
    • CS
    • DataScienc..
      • Data Struc..
      • LeetCode
    • BackEnd
      • Express
      • Node.js
      • Nest.js
    • DevOps
      • Docker
    • 매일메일
    • 회고
    • 코드캠프

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • PostgreSQL
  • javascript
  • nest.js
  • 자바스크립트
  • 알고리즘
  • vue-query
  • pinia
  • 함수
  • 번들러
  • Express
  • backend
  • vitejs
  • Vite
  • Vue.js
  • Vue3
  • node.js
  • tanstack
  • Vue
  • React Native
  • postgres

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Grace

grace's dev_note

코드캠프

코드캠프 34일차

2022. 10. 26. 17:10

https://domain.gabia.com/regist/today_domain
https://cloud.google.com/free

graphql vs REST-API
기존 REST-API
READ
axios.get(api주소)
put, post, delete

graphql은 endpoint가 하나인 REST-API이며 항상 POST방식을 사용한다

{
"query": "mutation createBoard { createBoard(createBoardInput: {writer:철수, password: 1234, title:제목, contents:내용}) {_id, title, write, contents}}"
}

optimistic ui

  1. 작업량이 적은API
  2. 99% 이상 성공 가능한 API
  3. 만약에 실패하더라도 피해가 없는 API
import { gql, useMutation, useQuery } from "@apollo/client";
import {
  IMutation,
  IMutationLikeBoardArgs,
  IQuery,
  IQueryFetchBoardArgs,
} from "../../src/commons/types/generated/types";

const FETCH_BOARD = gql`
  query fetchBoard($boardId: ID!) {
    fetchBoard(boardId: $boardId) {
      likeCount
    }
  }
`;
const FETCH_LIKE = gql`
  mutation likeBoard($boardId: ID!) {
    likeBoard(boardId: $boardId)
  }
`;

const OptimisticUIPage = () => {
  const [fetchLike] = useMutation<
    Pick<IMutation, "likeBoard">,
    IMutationLikeBoardArgs
  >(FETCH_LIKE);
  const { data } = useQuery<Pick<IQuery, "fetchBoard">, IQueryFetchBoardArgs>(
    FETCH_BOARD,
    { variables: { boardId: "61b816aa717be5002baa70a8" } }
  );

  const onClicklike = () => {
    fetchLike({
      variables: { boardId: "61b816aa717be5002baa70a8" },
      optimisticResponse: {
        likeBoard: (data?.fetchBoard.likeCount || 0) + 1,
      },
      update(cache, { data }) {
        cache.writeQuery({
          query: FETCH_BOARD,
          variables: { boardId: "61b816aa717be5002baa70a8" },
          data: {
            fetchBoard: {
              _id: "61b816aa717be5002baa70a8",
              _typename: "Board",
              likeCount: data?.likeBoard,
            },
          },
        });
      },
    });
    // refetch({ boardId: "61b816aa717be5002baa70a8" });
  };

  return (
    <>
      <div>좋아요 갯수: {data?.fetchBoard.likeCount}</div>
      <button onClick={onClicklike}>좋아요</button>
    </>
  );
};

export default OptimisticUIPage;
저작자표시 비영리 변경금지 (새창열림)

'코드캠프' 카테고리의 다른 글

코드캠프 35일차  (0) 2022.10.26
코드캠프 31일차  (0) 2022.10.26
코드캠프 30일차  (0) 2022.10.26
코드캠프 29일차  (0) 2022.10.04
코드캠프 28일차  (0) 2022.10.04
    '코드캠프' 카테고리의 다른 글
    • 코드캠프 35일차
    • 코드캠프 31일차
    • 코드캠프 30일차
    • 코드캠프 29일차
    Grace
    Grace
    기술 및 회고 블로그

    티스토리툴바