개발자

react query 좋은 코드?? 구현하는 법

2023년 07월 28일조회 418

react query로 채팅목록을 구현중입니다. 질문하고 답변이 오면 답변을 가공해서 recoil에 저장을하고 화면에 렌더링합니다. 이때 가공해야할것이 많고 오는 답변에 따라서 처리도 다 제각각이라 react query를 사용하는 부분이 코드가 매우 지저분합니다. 예를 들면 아래와 같이 되어있습니다. useSend = () => { // 각종 react query hook 선언 // recoil 상태값 선언 // recoil hook (각종 데이터 변형 처리) return useMutation( api 함수 호출, {onMutate: () => { api 호출하기전에 처리 }, onSuccess: () => { api 성공시 처리 응답으로 온 data를 렌더링 처리를 위해 각 구성을 달리해서 recoil에 저장하기도하고 (데이터 저장하는 hook도 따로 있음) 응답으로 온 data값에따라 또 다른 react query hook을 호출하기도 합니다. }) 이렇게 react query를 날리는 hook은 따로 만들었으나 이 안에서 하는일이 너무 많습니다. react query를 사용하는 코드들을 몇개 검토해보았는데.. 죄다 setquerydata로 저장을하고 그럼 useQuery에서는 다시 api를 호출하지않아도 리스트가 재렌더링되는 등의... 한마디로 backend에서 온 데이터를 그대로 쓰는?? 이런 예제들만있어서 참고가 잘 안되네요. 이럴경우 어떻게 구현하는 것이 좋을까요?? 약간의 팁도 감사합니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

인기 답변

배민근님의 프로필 사진

어떤 예제를 원하시는지 정확히는 모르겠지만 질문에 빗대에 볼 때 저라면 query의 select와 mapper를 이용할 것 같습니다. select의 경우 원본 데이터의 형태를 받아 가공할 수 있는 옵션을 제공합니다. onSuccess의 파라미터로 오는 data도 select를 거친다면 data도 미리 바뀌어서 옵니다. 적당히 짧다면 바로 select 내에 쓸 수도 있을거 같고 작성자분께서 적으신 것으로 보았을때 좀 복잡할거 같아 따로 mapper를 둘 거 같습니다. mapper의 경우는 데이터 맵핑을 하기 위한 것으로 함수 형태로 작성해도 class 형태로 작성해도 원하시는 대로 만드시면 되는데요! 제가 한다면 저는 함수 형태로 따른 파일에 분리해둔 다면 select에 data를 받아 ~~ViewModel(data) 이런 식으로 반환할 것 같네요! (요건 react query에 있는 개념이라기보단 프로그래밍에서 일반적인 개념입니다~) 근데 이러나 저러나 응답이 좀 맘에 안드신다면 너무 FE에서만 고민하시지 마시고 서버쪽과도 이야기해보고 응답을 바꾸거나 BFF 쓰는 방법도 있을거 같아요..!

최동희님의 프로필 사진

최동희

작성자

한글과컴퓨터 프론트엔드 개발자2023년 08월 02일

좀 더 질문을 구체화해보았습니다. 도움 주셔서 감사합니다. React api호출부분을 어떻게 효율적으로 다룰지고민중인데요 Api호출시 호출전 성공후 에러 등의 상황처리를 하려면 react query가 제일 간단해보이는데 제가 하는 프로젝트는 흔히들하는 리스트를 불러오고 수정하는게아니라 (post하고 get하는) 거의 post만 합니다 예를 들어 chagpt api를 호출한다고 가정해볼게요 마케팅의 주제, 키워드 등을 입력하고 api호출하고 답변받으면 그 답변을 보여주고 답변에 여러 속성값도있어서 속성값에 따라 또 다른 api를 호출하기도하고 프론트에서 ux처리등을 합니다 처리해야할 속성값들이 많고 api호출하고 성공답변을 받으면 또 다른 api를 호출하기도하다보니 Api를 호출하는것들을 기능별로 custom hook이 필요합니다 지금은 구현을 react query와 recoil을 써서 각 기능별로 다 hook을 만들고 success시 전역에서 필요한 데이터는 recoil에 저장해서 사용중인데 더 효율적인 구현방법이 있을까요??

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!