Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BookNote] 북노트 작성 중 버벅임 개선(feat. react v18) #282

Merged
merged 17 commits into from Jun 9, 2022

Conversation

soryeongk
Copy link
Contributor

@soryeongk soryeongk commented May 30, 2022

📌 내용

  • 책추가에서 사용된 debounce를 커스텀 훅으로 변경하였습니다.
  • 북노트 큰 질문과 답변에서의 버벅임을 개선했습니다. 이를 위해 react 18로 업그레이드를 진행하고, useDeferredValue를 사용해 커스텀훅을 만들었습니다. 하지만 여전히 북노트가 방대해지면, 버벅임이 조금 남는 것으로 보입니다. Next.js 마이그레이션 진행하면서 한 번 더 확인해봐야할 것 같습니다.

<참고> - 곧 제 것도 정리해서 올려보죱


📌 내가 알게 된 부분

  • react 18 업그레이드에서 react, react-dom, recoil 뿐 아니라 @types도 확인이 필요하다는 것! 타스는 역시..
  • useDeferredValue는 디바운싱이나 쓰로틀링과 유사하긴 하지만 timeout을 지정하는 용도는 아니다. urgent update와 deferred update를 나누기 위한 것이다. 책추가에서 디바운싱을 사용한 가장 큰 이유는 모든 변경마다 api가 호출되는 것을 막기 위함인데, useDeferredValue는 "급한 update는 아니니까 리액트 렌더링이 바쁘지 않을 때 처리해죠~" 라는 의미라서 결국 책추가 input에서의 변화를 모두 감지해 api 호출을 보내는 것은 동일하다. 디바운싱보다는 더 자주 update를 하는 것! 그래서 북노트에는 useDeferredValue를 적용해, 모든 변경을 감지하고, 리액트가 여유가 있을 때 state를 업데이트하도록 했다. 책추가의 경우 모든 변경마다 api 호출을 보내지 않고, 200ms의 지연을 시키기 위해서 주함이가 만든 debounce를 그대로 사용했다.
  • useDeferredValue에 timeoutMS를 지정하는 예제가 있는데, 코드에서는 over argument취급을 당해서 삽질을 했는데, 이 부분은 최근 업데이트로 스펙아웃되었다. (참조: facebook github(클릭))

📌 질문할 부분

  • debounce 부분의 변수명이 헷갈릴 수 있을 것 같은데, 더 좋은 이름이 떠오르지 않습니다. 주석으로만 대체해도 되려나욤?
  • addBook에 있는 handleSearchBook의 reset argument는 검색 결과가 15개 이상일 경우의 처리를 위해 넣어둔 인자 맞나요? (하기 코드 참고)
const handleSearchBook = async (query: string, reset: boolean) => {
  const paramsAPI = {
    query,
    sort: "accuracy",
    // page: 1,
    size: 15,
  };

  const { data } = await searchBook(paramsAPI);

  if (reset) {
    setBooks(data.documents);
  } else {
    setBooks(books.concat(data.documents));
  }
};

@soryeongk soryeongk added 🐜소령 🚧 refactor 리모델링 재개발 labels May 30, 2022
@soryeongk soryeongk self-assigned this May 30, 2022
@soryeongk soryeongk added this to 하고 있는 것 in 📚클라이언트 프로젝트📚 via automation May 30, 2022
@soryeongk soryeongk requested review from joohaem and Gyuminn June 6, 2022 09:48
@soryeongk soryeongk added the 🛠️ fix 내가 해결해주지 label Jun 6, 2022
@soryeongk soryeongk linked an issue Jun 6, 2022 that may be closed by this pull request
3 tasks
@soryeongk soryeongk changed the title Feature use debounce [BookNote] 북노트 작성 중 버벅임 개선(feat. react v18) Jun 6, 2022
@joohaem
Copy link
Member

joohaem commented Jun 6, 2022

고생하셨습니다🔥🔥 네이밍도 충분한 것 같아요!

handleSearchBook 에 대해서 @Gyuminn 님이 답변 주실 수 있을 것 같습니다~ ~

@soryeongk soryeongk merged commit 12e7486 into develop Jun 9, 2022
📚클라이언트 프로젝트📚 automation moved this from 하고 있는 것 to 모두 해낸 것 Jun 9, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🚧 refactor 리모델링 재개발 🛠️ fix 내가 해결해주지 🐜소령
Projects
Development

Successfully merging this pull request may close these issues.

[BookNote] 질문 리스트 추가 버벅임 버그
2 participants