Skip to content

0727 ​

Clone coding ​

Buy? Purchase? ​

이때까지 구매와 관련 된 컴포넌트나 훅명을 다 purchase로 썼는데
가만 생각하니까 Buy라는 단어도 존재하지 않는가
심지어 구매 관련 handle 함수는 Buy라고 적고있었다
이 프로젝트에선 Buy를 사용하는게 좋을까, Purchase를 사용하는게 좋을까?

  • Buy
    • 거래를 시작하는 느낌, 간단한 거래
  • Purchase
    • Buy보단 공식적인 구매 절차, 형식적이고 완전한 과정

상품 상세 페이지든 장바구니 페이지든간에
상품을 구매하기 위한 프로세스를 시작하는 단계임
고로 Purchase를 Buy로 수정

Tanstack form VS react hook form ​

저번 RealWorld 플젝 때 둘의 차이에 대해 잠깐 알아보긴 했다만, 지금 제대로 알고있는 상태가 아닌 것 같아서..

  • tanstack form이든, react hook form이든간에 왜 필요한가?

    • 비제어 컴포넌트 방식으로 불필요한 리렌더링을 최소화할 수 있다
      • 비제어 컴포넌트 방식이 뭔데?
      • 일반적인 React는 제어 컴포넌트 방식이라 React state가 값을 제어해서 매번 state가 업데이트된다.
      • 근데 react hook form을 쓰면 DOM이 값을 직접 관리한다. 그래서 React state가 없다. (여기서 중요한 점이 tanstack form은 제어 컴포넌트 방식이다. 이는 뒤에서 다시 설명)
    • 복잡한 폼 상태를 쉽게 관리할 수 있다
      • 복잡한 폼이 대체 뭐고, 얼만큼 쉽게 관리할 수 있는데?
        • 복잡한 폼이란 동적 필드나, 조건부 필드 표시 등을 의미한다.
        • 동적 필드 먼저 생각해보자. 내가 패키지 여행 사이트를 만들고 있어서 여행객 정보를 입력할 수 있는 폼을 만들고 있는데, 여행객을 한 명만 적을 수도 있고 같이 갈 일행 수 만큼 마음껏 입력할 수 있다고 가정하자. 근데 이 때 일반 react를 쓴다면 한 명의 정보만 추가하는데 다른 여행객의 정보까지 다같이 리렌더링 된다.
        • 다음으로 조건부 필드는 올리브영에서 화장품을 시키는데 오늘 드림이 있고 픽업이 있고 배송이 있고 이렇게 다양하게 있지 않는가 이 때 오늘 드림을 누르면 배송지와 배달 시간이 나오고, 픽업을 누르면 매장 정보가 나와야하고, 배송을 누르면 배송지를 입력해야 되는데 이러한 조건을 다 일일이 처리해야된다.
        • 이외에도 멀티 스탭 폼이나 실시간 계산이 필요한 폼 등을 복잡한 폼이라 한다.
        • 왜 위와 같은 것들을 복잡한 폼이라고 부르는가?
          • 리렌더링도 중요한 문제지만, 에러 관리도 각 필드마다 따로 따로 관리해야되고, 검증 로직도 복잡해지기 때문이다.
  • react hook form은 무엇인가?

    • 앞서 말한것들을 간편하게 쓸 수 있게 해주는 라이브러리다.
  • tanstack form은 react hook form이랑 뭔 차인가?

    • tanstack form은 제어 컴포넌트다
      • 아니 그럼 얘는 제어 컴포넌트면서 어떻게 리렌더링을 최소화하는가?
      • useFieldValue를 이용해 selective subscription으로 리렌더링을 최소화한다.
    • 타입 안정성
      • 얼만큼 차이가 나는데?
        • react hook form은 컴파일 시점엔 타입 오류를 모르는데, tanstack form은 컴파일 시점에서부터 타입이 체크된다.
        • tanstack form은 어떻게 컴파일 시점에서부터 타입이 체크 될 수 있는건데?
          • react hook form은 제네릭으로 타입을 따로 선언해서 사용해야 되는데
          • tanstack form은 defaultValues에서 타입을 자동 추론한다
          • 그래서 컴파일 시점에서부터 타입을 체크할 수 있다.
  • 그래서, 해당 플젝에선 뭘 쓰는게 좋을까?

    • 먼저 관리되고 있는 폼이 몇 개 인가?
      • product quantity와 option을 select하고 있기에 총 2개다. 그래서 리렌더링 문제는 발생하지 않을거다. 애초에 옵션을 다른걸 고르면 가격 등 전체가 리렌더링 되는게 맞으니까.
      • 그러면 그냥 라이브러리 안 쓰고 일반 form을 사용해도 되지 않았을까?
      • 단순해보이지만 옵션별로 가격도 계산해야 되고 max purchase에 대한 검증도 해야되기에 react hook form을 사용했다.
    • 만약 일반 form을 썼으면 어떻게 됐을건데?
      • 현재는 그냥 useWatch를 활용해 option과 quantity의 변경 상태를 추적하고 있지만, 일반 form을 사용했더라면 useState 쓰고, 하위 컴포넌트로 props 전달하고, 직접 상태 동기화도 해야됐을거다.
  • 참고 자료