프로그래밍

infinite scroll 페이지 질문

프레임워크는 nuxt3 (vue 기반)

 

1. 많은 수량의 이미지를 나열하는 기본적인 페이지가 있음

2. query에 따라 필터링을 하고

3. 이미지를 클릭하면 detail 페이지를 띄움

4. 인피니트 스크롤임

5. 한번 스크롤시 72개 불러옴

 

기본적으로 핀터레스트 비슷한 느낌인데 좀 도와주세여

 

고민이 뭐냐면

 

다른 필터 조건으로 검색해서 넘어갔다가

뒤로가기해서 원래 페이지로 돌아갈때

전페이지의 데이터를 다시 로딩하는데 첫번째 페이지만 가지고오는 구조임

 

onMounted(() => {

  // 필터 query만 watch 하여 변할경우 page를 1로 리셋하고, api에서 현재 page 변수와 query 변수로 데이터 가져오기

 // 필터 query가 안변하고 page만 변할 경우(스크롤 시), 현재 데이터에 다음 페이지 데이터 가져와서 추가

})

 

그러니까 전페이지에서 스크롤을 많이 내렸으면 다른곳 갔다가 다시 돌아오면

스크롤 복구도 안되고 만약 존나 많이 내렸다면 1페이지부터 다시 스크롤해야함

 

detail페이지는 다른 컴포넌트라 들어갔다가 list페이지로 뒤로가기하면

마지막 상태가 고대로 보존되어 있음

문제가 없음

 

내 솔루션

1. query parameter (필터 조건 및 페이지)를 key로 하여 데이터json와 스크롤 포지션을 일일이 캐시해놓는다

2. query parameter을 key로 하고 스크롤 포지션만 캐시 후 캐시된 page까지 api에서 데이터를 로드하고 스크롤 포지션을 restore한다

3. 모르겠다 ???

10개의 댓글

2023.08.16

이런거에 정답은 없음ㅋㅋ 스스로 내린 솔루션 중에 2번이 제일 자연스러울 것 같은데? 스크롤 포지션 (offset/page) 가 url에 남아있으니 어쨌거나 불러오면 그만이고..

유저 사용 통계 바탕으로 얼마나 "뒤로가기"를 많이 하는지 파악해서 사용량이 많으면 1번으로 바꿔도 될것 같음

0
2023.08.16
@undefined

분명 프론트엔드가 이전보다 존나 발전했는데

순 html로 로드 할때가 덜 골치 아팠던거 같아.......

0
2023.08.16

옛날에 이거때문에 클라이언트가 요청한적 있었는데

걍 "마우스 좌측 뒤로가기나 브라우져 뒤로가기"는 우리가 컨트롤 할수없는 영역이라고 둘러댐 ㅋㅋ

유튜브PC버전만봐도 작성자 상황이랑 비슷하다

0
2023.08.16

keepalive쓰면 되는거 아님?

0
2023.08.16
@프로그래머스

keepalive쓰면 다른 컴포넌트 간 전환시 괜찮은거 아님?

아니면 page key를 route.query로 묶고 keepalive를 같이 써볼까

0
2023.08.16
@너가전부옳아

https://velog.io/@nikki/TIL-Nuxt

안됨?

0
2023.08.16
@프로그래머스

흠 그니까

다른 컴포넌트 간에는 keepalive가 통함

예) 해당 리스트페이지를 쭉 내렸다가

about페이지 갔다가 다시 리스트페이지로 뒤로가기해서 돌아오기

그럼 됨 완벽함

데이타, state, dom, 스크롤 포지션 전부 유지됨

 

근데 위처럼 1개의 같은 컴포넌트 안에서는

(같은 리스트 페이지 컴포넌트 안에서 필터 조건만 바꾸는 상황, query parameter만 변함)

 

1. route의 query를 watch해서 변할 시 api를 다시 call 하고 data만 교체하거나

(page load 없음, unmounted, mounted 사이클 안돔)

 

2. 아니면 page key를 route의 query 파라메터로 지정을 해서,

query파라메터가 변할 시 다른 page로 인식해서 페이지를 reload 해야하는데

(unmounted, mounted 사이클 다시 돔)

 

둘다 keepalive가 적용이 안됨

0
2023.08.16
@너가전부옳아

몬말인지 정확히 이해가 안가는데

현재 페이지 안에서, query에 따라 리스트가 변하는데, 이전 query의 리스트 데이터를 유지하고 싶다는거임?

 

그러면 query별로 보여줄 list를 각각 컴포넌트화하고, 해당 컴포넌트들을 query에 따라서 보여지도록 keepalive 걸면 될거같은데

 

```js

<template>

...다른 태그 및 컴포넌트들

<KeepAlive>

<List1 v-if="query === 'first'" />

<List2 v-else-if="query === 'second'" />

....기타 리스트들

</KeepAlive>

</template>

 

<script setup>

 

const route = useRoute();

 

const query = computed(() => ...원하는 쿼리);

</script>

```

 

이럼 안됨?

0
2023.08.17
@프로그래머스

query가 한둘세가지가 아니라

경우의수가 많음

 

그니까 다나와에서 컴퓨터 산다 생각하면 됨

cpu: 10세대 11세대 12세대 13세대

메모리: ddr3 ddr4 ddr5

글카: nvidia amd

그외 이런저런 필터들

이래 필터가 있자나

이걸 if문으로 할순없지

0
2023.08.17
@너가전부옳아

그런거면 요구사항이 너무 무리한거 같은데

정확하게 어느정도까지 저장되는걸 원하는지 명확하게 정할 필요가 있을듯

 

굳이 구현한다면 런타임 메모리에서 들고있기에는 너무 비대해질 수 있으니, indexedDB에다가 넣어놓고 꺼내쓰는 방안이 젤 나을거 같은데

 

아니면 최신 몇개의 조건만 리스트를 메모리에 넣어놓고 꺼내쓰던지

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
5719 [프로그래밍] 하이브리드 웹뷰기반 앱은 rn이 정석이야? 3 잠적자 0 21 시간 전 165
5718 [프로그래밍] c# webview2 도움요청함.. 7 carpediem 0 1 일 전 120
5717 [프로그래밍] 현업 개발자형들 맥씀? 9 이또히로부미 0 1 일 전 219
5716 [프로그래밍] libtorch에서 cuda 안불러와지는거 도움! 2 Hakat 0 2 일 전 125
5715 [프로그래밍] 뭔가 게시판이 애매해서 그런데 gis 잘아는 사람? 1 하늘늑대 0 3 일 전 165
5714 [프로그래밍] 컴포즈가 프리뷰랑 폰에서 다르게 동작해요 1 집에가게해줘 0 3 일 전 118
5713 [프로그래밍] 난바보다) 크로미움 램사용량 문제 일단 해결 2 ye 0 5 일 전 284
5712 [프로그래밍] k8s DNS 이슈는 해결이 안되나보다. 잉텔 0 5 일 전 171
5711 [프로그래밍] 분노) 진짜 유튜브 구글 패악질 토나오네 씨발 17 ye 0 7 일 전 770
5710 [프로그래밍] 프론트엔드 공부하려는데 언어 추천좀 7 스트리플 0 7 일 전 352
5709 [프로그래밍] 객체지향 뽕에 취하지마라 8 69746974 2 8 일 전 409
5708 [프로그래밍] 요즘 앱개발 인력시장 어떰..3년차 2 센치해요 0 11 일 전 388
5707 [프로그래밍] 컴포즈 Box 컴포넌트가 안 나와... 1 집에가게해줘 0 13 일 전 148
5706 [프로그래밍] 아 ssl 적용햇는데 개정신없네 9 넌또화나있네 0 13 일 전 305
5705 [프로그래밍] 패스트 캠퍼스 <---- 얘내는 가격 인상 원툴임? 5 조강현 0 16 일 전 398
5704 [프로그래밍] 클라가 파이썬 셀레니움같은거 써서 클릭하고 그러는걸 감지 ... 5 리옴므 0 17 일 전 266
5703 [프로그래밍] leetcode 50일 달성 1 JimmyMcGill 1 17 일 전 237
5702 [프로그래밍] 그냥 개인공부용 git 만들건데 5 년째재수강 0 17 일 전 336
5701 [프로그래밍] html 자바스크립트 질문 19 책걸이 0 18 일 전 370
5700 [프로그래밍] 아니 시바 이게 무슨일이야 4 인간지표 0 19 일 전 380