ランダムに作成された無限スクロールin reaction
16453 ワード
Infinite scroll
Start
スクロールするときに出てくるのは一つの項目よりもっときれいだと思います.
無限スクロールを急ぐ.
Plan
作成する前に、理解する必要があるのは
Code
次のコードは、サーバと通信する前のコードです.
const handleScroll = (e) => {
console.log(e.currentTarget.scrollHeight, '스크롤높이');
console.log(e.currentTarget.clientHeight, '클라이언트높이');
console.log(e.currentTarget.scrollTop, '스크롤탑');
const { scrollTop, clientHeight, scrollHeight } = e.currentTarget;
if (scrollHeight - scrollTop === clientHeight) {
setPage((prev) => prev + 1);
console.log('페이지 업');
}
};
useEffect(() => {
//여기서 계속 추가를 해줘야함
const listSliceLength = 9;
const loadData = async () => {
//추후 서버와 통신하여 데이터를 가져오는 부분
setIsLoading(true);
let remainder = state.ClothesData.slice(listSliceLength);
let list = state.ClothesData.slice((page - 1) * listSliceLength, page * listSliceLength);
console.log('데이터 가져오기');
console.log('나머지', remainder);
console.log('리스트', list);
//9개를 뽑기전에 전체 길이가 9 보다 작은 경우
// 9보다 많은 경우
if (remainder.length >= 12) {
setData((prev) => [...prev, ...list]);
} else {
list = state.ClothesData.slice(0, state.ClothesData.length);
setData((prev) => [...prev, ...list]);
}
setIsLoading(false);
};
loadData();
}, [page]);
名前のコードを作成できます一時的にsettimeoutを非同期のように設定
useEffect(() => {
//여기서 계속 추가를 해줘야함
const listSliceLength = 9;
const getData = () => {
setTimeout(() => {
let remainder = state.ClothesData.slice(listSliceLength);
let list = state.ClothesData.slice((page - 1) * listSliceLength, page * listSliceLength);
console.log('데이터 가져오기');
console.log('나머지', remainder);
console.log('리스트', list);
//9개를 뽑기전에 전체 길이가 9 보다 작은 경우
// 9보다 많은 경우
if (remainder.length >= 12) {
setData((prev) => [...prev, ...list]);
} else {
list = state.ClothesData.slice(0, state.ClothesData.length);
setData((prev) => [...prev, ...list]);
}
setIsLoading(false);
}, 1000);
};
const loadData = async () => {
setIsLoading(true);
getData();
// setIsLoading(false);
};
loadData();
}, [page]);
Result
Reference
この問題について(ランダムに作成された無限スクロールin reaction), 我々は、より多くの情報をここで見つけました https://velog.io/@kbm940526/무작정-만들어-본-infinite-scroll-in-reactテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol