ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [22.02.17] TIL
    TIL 2023. 2. 17. 21:32

    https://www.youtube.com/watch?v=pjakE0D4CeI&list=PLVsNizTWUw7FfOQedudGOz1N3bjt6iM0D&index=13

     

    리액트쿼리가 점점 익숙해져간다. 쭉쭉 진도를 나가다가 발생한 이슈로 오늘 배운 것이다.  리액트의 생명주기.

    항상 이것때문에 문제인데 계속 같은문제로 에러를 접해도 뭔가 애매~하다.

     

    오늘은 구매자,판매자가 거래취소를 누르면 각각 cancel data가 true가 되고, 두 cancel data가 다 true가 되면 구매한 금액만큼을 구매자에게 더해주는 환불로직을 만들었다.

     

    근데 취소버튼 onClick에 두 cancel버튼을 각각 누르면 true로 변하는 것 까진 짰는데,

    구매자에게 돈이 돌아가지 않는 이슈가 발생했다.

    왜그런건가 콘솔을 요리조리 찍어보며 내린 결론은 if문 안의 조건문이 렌더링 문제로 true로 바뀌지 않아서 작동하지 않았던 것,

    그래서 돈 돌려주는 if문 로직만 따로 onClick에서 빼고, useEffect에 넣어줬다. 의존성배열은 해당 데이터가 바뀌는 데이터 이름을 넣어줬다.

    결과적으로 잘돌아간다.

    튜터님이 추천해주신 위의 영상을 보고 오늘은 마치려고 한다.

     

    마지막으로 완성된 useEffect 코드

        const { data, isLoading } = useQuery(['salePost', id], async () => {
        // 쿼리키는 중복이 안되야 하기에 detail페이지는 저렇게 뒤에 id를 붙혀서 쿼리키를 다 다르게 만들어준다.
        const response = await axios.get(
          `http://localhost:4000/onSalePosts?id=${id}`
        );
        return response.data;
      });
      
      // 취소 시 구매자의 point를 복구시켜주는 함수
      const { mutate: giveBackPoint } = useMutation(
        (newUser: { point: string }) =>
          axios.patch(`http://localhost:4000/users/${data?.[0].buyerUid}`, newUser),
        {
          onSuccess: () => queryClient.invalidateQueries(['buyerData']),
        }
      );
      
      // 둘다 취소하면 포인트를 구매자에게 돌려줍니다.
      useEffect(() => {
          if (data?.[0].isSellerCancel && data?.[0].isBuyerCancel) {
            giveBackPoint({
              point: String(Number(buyerData?.point) + Number(data?.[0].price)),
            });
          }
      }, [data]);
    {
          "id": "9d3045d3-7d6c-49c1-b7e0-4b150e928017",
          "postsId": "9432588a-88a9-47a4-ab5c-cdca00341b2d",
          "buyerUid": "Qh8zrzAwjMWSYXSSDJYIWIzpLZ13",
          "sellerUid": "DSF5axJJNDUvd5bGXoUwrmbvtyj2",
          "title": "숙제풀어드려요",
          "content": "1문제당 1000원",
          "imgURL": [],
          "price": "1000",
          "category": "study",
          "ceatedAt": 1676621674937,
          "isDone": false,
          "isSellerCancel": true, // 판매자가 취소
          "isBuyerCancel": false, // 구매자가 취소
          "views": 0,
          "like": []
        }

     

    'TIL' 카테고리의 다른 글

    [22.03.19] TIL 기술면접 준비하기2  (0) 2023.03.19
    [22.03.18] TIL 기술면접 준비하기1  (0) 2023.03.18
    [23.02.15] TIL  (0) 2023.02.16
    [23.02.14] TIL  (0) 2023.02.14
    [23.02.06] TIL 최종 프로젝트 시작  (0) 2023.02.07
Designed by Tistory.