-
Notifications
You must be signed in to change notification settings - Fork 0
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
[#18] useQuery, useInfiniteQuery -> useSuspenseQuery, useSuspenseInfiniteQuery 교체 #19
Conversation
suspense 문서화 너무 잘해주셨는데요? 읽으면서 왜 suspense를 써야하는지 알 수 있었습니다. 고생하셨습니다 ❤️ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
React의 철학인 선언적인 프로그래밍을 적극적으로 반영하고자 기존 명령형 프로그래밍 성격이 강했던 기존 방식을 Suspense를 활용한 방식으로 바꾸고자 진행한 작업입니다.
위 멘트가 상당히 개발자스러워서 멋있었습니다 ㅎㅎ
영재님의 PR은 매번 큰 울림을 주네요. 숭배하겠습니다 ❤️
<WorkspaceContainer /> | ||
<WorkspaceSection /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
컴포넌트 의미가 좀 더 명확해져서 좋네요!
export const WorkspaceErrorPage = () => { | ||
const error: any = useRouteError(); | ||
const statusCode = error?.response?.statusCode || error?.status; | ||
console.log('error', error); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
console.log를 제거를 깜빡하신것 같아유 😊
if (isError) { | ||
toast.error('워크스페이스 정보 불러오기 실패'); | ||
return; | ||
} | ||
if (!data) { | ||
if (!isError || !data || !data.workspaceDto) { | ||
return; | ||
} | ||
|
||
if (!data.workspaceDto) { | ||
return; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if문 최소화 좋네요 👍
import { errorStatus } from '../utils/constants'; | ||
|
||
// eslint-disable-next-line no-unused-vars | ||
export const errorMiddleware = (err: Error, req: Request, res: Response, _next: NextFunction) => { | ||
console.log(err.constructor.name); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
console.log를 제거를 깜빡하신것 같아유 😊 222
🔗 #18
🙋 Summary (요약)
useQuery
,useInfiniteQuery
를Suspense
를 활용할 수 있는useSuspenseQuery
,useSuspenseInfiniteQuery
로 교체하였습니다.😎 Description (변경사항)
useQuery
,useInfiniteQuery
->useSuspenseQuery
,useSuspenseInfiniteQuery
교체명령적, 선언적 프로그래밍에 대한 간단한 설명
예시
설명 : 에러 발생 시 Error 컴포넌트를 렌더링하고 로딩 시에는 로딩 컴포넌트를 렌더링하고 그렇지 않으면 보여주려고 한 컴포넌트를 렌더링하라고 절차를 정의함
선언적 프로그래밍
예시
ErrorBounday
,Suspense
컴포넌트가 처리함 (시스템에 위임)useGetWorkspace
훅에서useSuspenseQuery
를 사용하도록 교체useQuery
를useSuspenseQuery
로 교체함기존 코드
변경된 코드
변경 전 :
useGetWorkspace
훅에 에러 처리를 해야 했음변경 후 : 데이터 페칭 성공 시 전역 상태를 초기화하는 작업만 진행
WorkspacePage
컴포넌트 변경점기존
변경 후
createBrowserRouter
에서ErrorBoundary
와Suspense
를 통해 에리 및 로딩 처리 진행useGetWorkspaceList
훅에서useSuspenseInfiteQuery
를 사용하도록 교체useInfiteQuery -> useSuspenseQuery로 교체
useGetWorkspaceList
변경점useInfiteQuery
->useSuspenseQuery
만 변경기존
WorkspaceContainer
변경점WorkspaceContainer
라는 컴포넌트명은 workspace만을 감싸고 있는 느낌이 강함. 하지만WorkspaceHeader
컴포넌트도 감싸고 있었음WorkspaceSection
으로 컴포넌트명 변경WorkspaceContainer
컴포넌트로 분리함WorkspaceContainer
컴포넌트를Suspense
로 감싸 로딩 처리 진행기존 코드
변경된 코드
WorkspaceContainer
컴포넌트useGetWorkspaceList
훅을 통한 워크스페이스 데이터 페칭 진행useInfiteScroll
,useVirtualScroll
훅을 통해 기존 무한스크롤, 가상스크롤 적용코드
🔥 Trouble Shooting (해결된 문제 및 해결 과정)
ErrorBoundary
를 직접 구현하였으나, 이미react-router
에서 제공하는errorElement
를 통해 에러 처리를 하였기에 기존 코드를 전부 수정하는 작업은 비용이 너무 크다고 생각이 들었습니다.Workspace
조회 시 404 에러만 따로 처리해주는WorkspaceErrorPage
를 만들었습니다.🤔 Open Problem (미해결된 문제 혹은 고민사항)