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

[SP2] 프로젝트 목록 useQuery 적용 및 필터링 값 유지 #256

Merged
merged 17 commits into from
Nov 6, 2023

Conversation

solar3070
Copy link
Member

Summary

Screenshot

  • 프로젝트 목록을 불러올 때 useQuery를 사용합니다.
  • 프로젝트 목록의 필터링 값을 유지합니다. (세션 스토리지 저장)
    image

Comment

  • 최근 출시한 프로젝트(상단)SOPT에서 진행된 프로젝트 둘러보기(하단)에서 각각 useFetch가 사용되고 있었습니다. 카테고리, 플랫폼 필터 모두 '전체'일 때 받아오는 데이터의 차이가 없고 정렬 여부만 달랐기 때문에 만든 useQuery 훅을 두 곳에서 모두 사용하였습니다.

  • 해당 [이슈]로 인해 useQuery에서 받아오는 data의 타입을 projectType[]으로 단언하는 코드를 추가적으로 작성하였습니다. Tanstack-Query v5에서는 아예 서스펜스 관련 쿼리가 따로 있어 data가 undefined일 때에 대한 처리를 따로 해주지 않아도 됩니다. (버전 업데이트를 희망하는 이유)

  • 필터링 값을 useStorage 훅을 통해 세션 스토리지에 저장 중인데 새로고침을 하면 defaultValue로 준 '전체'데이터가 잠깐 보였다가 필터링된 데이터로 돌아갑니다. 세션 스토리지에 값이 있으면 해당 값을 state의 기본값으로 주고자 했으나 하이드레이션 이슈가 있어서... 좋은 해결 방법을 고민 중입니다.

    2023-11-05.1.57.29.mov

@solar3070 solar3070 self-assigned this Nov 4, 2023
const [selectedCategory, setCategory] = useStorage<ProjectCategoryType>(
'projectCategory',
'sessionStorage',
ProjectCategoryType.ALL,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기서 초깃값을 undefined로 주고, selectedCategory가 undefined이면 아무것도 띄우지 않으면 어떤가요?


if (state.data.length === 0) return null;
const { data } = useGetProjectList(ProjectCategoryType.ALL, ProjectPlatformType.ALL, 'updatedAt');
const recentProjectList = data as ProjectType[];
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

as를 사용하지 않는 방법은 없나요..? as를 사용하면 실수할 가능성이 생겨서 최대한 지양하고 있습니다.!!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

타입 단언을 해주고 있는데 리액트 쿼리를 v5로 업그레이드 하기 전에 임시로 써둔 코드입니다! useSuspenseQuery 훅을 사용하게 되면 지울 예정입니다!

export function ProjectList({ selectedCategory, state }: ProjectListProp) {
export function ProjectList({ selectedCategory, selectedPlatform }: ProjectListProp) {
const { data } = useGetProjectList(selectedCategory, selectedPlatform);
const projectList = data as ProjectType[];
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기도 as가 없으면 좋을 것 같아요!!

})()}
<S.ProjectListHeader selectedCategory={selectedCategory}>
<ProjectCategoryDescription selectedCategory={selectedCategory} />
<ProjectListCount count={projectList?.length ?? 0} />
Copy link
Member

@SeojinSeojin SeojinSeojin Nov 5, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

위에 as가 있어서 타입이 항상 array로 캐스팅되므로 undefined인 경우가 고려되지 않아도 괜찮을 것 같습니다!

Comment on lines +16 to +19
& > span {
display: none;
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

별도 스타일드 컴포넌트로 빼면 어떨까요..?? 자식 선택자를 사용하면 나중에 유지보수하기 어려워질 수 있을 것 같아요..!!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기에서도 여쭤봤었는데 자식 선택자를 지양하는 게 좋은 이유가 궁금합니다~!!

Copy link
Contributor

@f0rever0 f0rever0 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다!!
이번 배포하고 query v5로 올려 return data type에 관한 문제는 해결하면 될 것 같아요!

} from '../../types/project';

const client = axios.create({
baseURL: BASE_URL,
timeout: DEFAULT_TIMEOUT,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

timeout review/sopticle api 에도 있는데, 삭제해도 되는건가요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

timeout이 3000으로 되어 있는데 프로젝트 목록을 불러올 때 해당 timeout을 초과해서 에러가 발생하는 경우가 많더라고요.
그래서 제거했는데 아예 제거하는 것보다 좀 늘려서 다시 지정하는 게 좋을까요?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 초과해서 삭제했군요! 음,, 안전장치? 처럼 부하를 막기 위해 있으면 좋다고 생각해서 6000 정도로 늘리는건 어떨까요?
필요한가?에 대한 의견도 궁금합니다!

@pull-request-size pull-request-size bot added size/XL and removed size/L labels Nov 6, 2023
@solar3070 solar3070 merged commit 74598ac into develop Nov 6, 2023
1 check passed
@solar3070 solar3070 deleted the feat/#255-project-list-useQuery branch November 6, 2023 07:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

프로젝트 목록 useQuery 적용 및 필터링 값 유지
3 participants