작성
·
47
·
수정됨
0
결론부터 말하면 검색할 때 페이지네이션 현재 페이지가 1로 안 바뀌어서 바꿔봤습니다.
예를 들어 ‘철’이라는 검색어를 입력했더니 페이지가 2페이지까지 있음. 2페이지를 클릭해 2페이지가 보이는 상태에서 검색어를 ‘철수’로 바꾸니 게시글 수가 1페이지까지밖에 없었는데, 1페이지가 현재 activedPage가 아니게 됨(없어진 2페이지 그대로).
검색한 게시글 목록 refetch는 제대로 이루어지기에 1페이지의 내용이 보이는 것은 맞지만 현재 페이지 숫자가 제대로 표시되지 않음. 또한 ‘안녕하세요’의 12페이지를 보고 있었는데 ‘안녕’으로 검색어를 바꾸니 당연히 refetch를 통해 1페이지 게시글 목록을 보여주지만, 페이지네이션은 그대로 11, 12, ..., 20임
검색어가 바뀌면 페이지네이션의 activedPage와 startPage를 1로 변경해주도록 Paginations01.container에서 useEffect 실행시켜 해결
useEffect(() => {
setStartPage(1);
setActivedPage(1);
}, [props.count]);
검색어를 바꾸면 검색된 총 게시글 수도 보통 달라질 거라는 생각에 props.count를 의존성으로 써본건데 검색어를 바꿔도 우연히 검색된 총 게시글 수가 똑같을 경우 useEffect 실행 안 되니
정말로 검색어가 달라질 때를 기준으로 하려고
BoardList에 있는 keyword를 pagination 컴포넌트에 props로 넘겨줘서 사용
// BoardList.presenter.tsx
<Paginations01 refetch={props.refetch} count={props.count} keyword={props.keyword} /> // keyword 전달
// Paginations01.container.tsx
useEffect(() => {
setStartPage(1);
setActivedPage(1);
}, [props.keyword]);
// Paginations01.types.ts
export interface IPaginations01Props {
...
keyword?: string;
...
}
고쳐지긴 했는데 일단 useEffect에서 setState를 하고 있다는 점(여기선 크게 상관이 없는건지?)과
페이지네이션 컴포넌트인데 keyword라는 걸 받아온다는 것 자체가 검색 컴포넌트의 영향을 받는다는 뜻 아닌가 싶어서(keyword는 검색 기능이 있을 때만 존재하니까) 제대로 된 컴포넌트 분리에 대한 고민(keyword?로 하면 페이지네이션 컴포넌트 쓸 때 keyword 써도 되고 안 써도 되니까 이대로 해도 괜찮을지...?)
다른 방법은 있는지?
의견 있으시면 알려주시면 감사하겠습니다.
그외 궁금한 점
저는 이거 하는 과정에서 yarn dev 해놓은 상태에서 코드들을 저장 계속 하면서 고쳤는데 그럼 원래 바로바로 반영이 되잖아요. 코드에는 문제가 없어서 제대로 작동해야 했는데 페이지네이션 컴포넌트에서 props.keyword가 자꾸 undefined인 바람에 useEffect도 작동 안해서
코드가 문젠줄 알고 한참 삽질 후 그냥 vscode와 크롬 등등 다 끄고 좀 나중에 그대로 다시 켜보니까 잘 작동하게 됐는데 (yarn dev를 끊었다 다시 하는 거로는 아마 해결 안됐음)
이게 처음이 아니고 저번에도 한 번 포기하고 결국 다음날 켜보니까 코드는 그대로인데 갑자기 잘 되었는데
정확히 무엇때문에 이런 문제가 생기는건지 모르겠네요!!! (캐시? .next? 뭐 그런 거 때문인가요?)
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 희주님.
프론트엔드에서 페이지네이션과 관련된 문제점을 해결하기 위해 시도하신 방법들에 대해 설명해주셔서 감사합니다. 이런 문제는 주로 상태 관리 및 컴포넌트끼리의 의존 관계에서 생길 수 있습니다. 제가 몇 가지 관련된 정보를 찾아드리겠습니다.
페이지네이션 문제와 상태 관리
useEffect
를 사용하여 검색어가 변경될 때마다 페이지네이션을 재설정하는 접근은 유효합니다. 다만, props로 전달받은 keyword
에 의존하는 것 때문에 고민이 있으신 것 같은데요, 이는 특정 시점마다 상태를 초기화하기 위한 자주 사용하는 방법입니다. 현재처럼 props.keyword
의 변화를 감지하여 그에 맞춰 상태를 재설정하는 것은 일반적입니다.상태가 저장/전달되는 문제
yarn dev
상태에서 변경사항이 즉시 반영되지 않는 것은 개발 과정에서 많이 접하는 문제입니다. 이 문제는 주로 캐시나 서버 사이드 렌더링(SSR) 관련 파일들이 제대로 초기화되지 않아서 발생합니다. 이 경우 .next
폴더를 삭제하고 다시 빌드하는 방법(yarn build
-> yarn dev
)이 있습니다.기존 답변 중 관련된 정보를 참고할 수 있는 링크를 첨부합니다.
.next
폴더나 기타 캐시 파일들을 어떻게 초기화할 수 있는지의 힌트를 얻을 수 있습니다.저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.