INFINITEスクロール
2週間から3週間行われた個人種目はほぼ終わりました.
ポートフォリオサイトを作る過程だけが残っている.そして.
面接に必要な技術面接も勉強しなければなりません.
その前に、ある項目に書かれているコードを整理したいと思います.記憶より記録がいい.
ネットワーク、モバイルに不可欠なテクノロジー.その名の通り無限スクロールです
1回のロードではロード時間が長くなり、ユーザーに不便をもたらします.これは、計画に合致するいくつかのデータをロードしてスクロールし、新しいデータをロードできる方法です.
INFINITEスクロールの作成には、スクロールイベントが使用されます.ニットに初めて触れて転がるときに最も一般的な方法かもしれません.白黒を問わず、すぐにコードを記録します.
(b)
(c)
これら3つを用いてINFINITEスクロールを実現した.
簡単に言えば、(a)+(b)>(c)−300の式である.
(c)の全長は1000であり、ここでは−300である.では(c)700です.
では、(a)+(b)が700であればスケジューリングします.
この方法で必要な位置でスケジューリングすることができる.そうすれば、そのスクロール位置で大量のdispatchが実行されます.もちろんパフォーマンスに悪影響を及ぼします.
したがってlodashライブラリの
lodash
最新のJavaScriptユーティリティライブラリは、モジュール化、パフォーマンス、その他の機能を提供します.パパパで
lodashによってJavaScriptとして使用する方法を容易に使用して翻訳することができる.
詳細については、「文書」を参照してください。
ここで使用される
スクロールする場合は、1秒以内にコールバック関数を実行する必要があります.この機能を使用して、dispatch
不要な部分を防いだ.
最後は2回連続で歌ったようですが、歌は間違いありません.
これは、スクロールによる不要な派遣を防止するという意味ではありません.
動作を実行するには、条件に従って派遣しなければならない.
上記の条件に従って、
Lastidはどのように使用しますか?
LasIdには、現在読み込まれている記事の最後に読み込まれた記事のid値があります.
backサーバにこの値を要求すると、クエリーとして送信されます.backサーバでどのように行われているかを理解しましょう.
次のルータを最初にロードして実行すると、クエリー・リストに0が送信されます.デフォルト値にスクロールすると、lastIdの値がクエリー・リストに渡されます.では、クエリリストが0より大きい場合、ルータはそれをスクロールと見なしてlastIdより小さいIDの文章をロードします.
スクロールアクティビティは良い方法ではありません...時間が多ければもっと良い方法で実現したい.
ポートフォリオサイトを作る過程だけが残っている.そして.
面接に必要な技術面接も勉強しなければなりません.
その前に、ある項目に書かれているコードを整理したいと思います.記憶より記録がいい.
INFINITEスクロール
ネットワーク、モバイルに不可欠なテクノロジー.その名の通り無限スクロールです
1回のロードではロード時間が長くなり、ユーザーに不便をもたらします.これは、計画に合致するいくつかのデータをロードしてスクロールし、新しいデータをロードできる方法です.
Front
INFINITEスクロールの作成には、スクロールイベントが使用されます.ニットに初めて触れて転がるときに最も一般的な方法かもしれません.白黒を問わず、すぐにコードを記録します.
// pages/index.tsx
import React, { useEffect } from 'react';
import { postsLoad } from '../actions/post';
const Home = () => {
const { loadPostsMore, loadPostsLoading } = useSelect((state) => state.post)
useEffect(() => {
const infiniteScroll = throttle(() => {
if (window.scrollY + document.documentElement.clientHeight > document.documentElement.scrollHeight - 300) {
// loadPostMore true / loadPostsLoading false면 dispatch
if (loadPostsMore && !loadPostsLoading) {
dispatch(
postsLoad({
lastId,
}),
);
}
}
}, 200);
// 스크롤 이벤트 발생
window.addEventListener('scroll', infiniteScroll);
return () => {
// 메모리 누수로 인한 스크롤 이벤트 지우기
window.removeEventListener('scroll', infiniteScroll);
};
}, [loadPostsMore, loadPostsLoading, lastId, dispatch]);
}
(a)window.scrollY
-スクロール回数の値(b)
document.documentElement.clientHeight
-現在の画面表示の高さ値(c)
document.documentElement.scrollHeight
-ページの合計高さ値これら3つを用いてINFINITEスクロールを実現した.
簡単に言えば、(a)+(b)>(c)−300の式である.
(c)の全長は1000であり、ここでは−300である.では(c)700です.
では、(a)+(b)が700であればスケジューリングします.
この方法で必要な位置でスケジューリングすることができる.そうすれば、そのスクロール位置で大量のdispatchが実行されます.もちろんパフォーマンスに悪影響を及ぼします.
したがってlodashライブラリの
throttle
を使用した.lodash
最新のJavaScriptユーティリティライブラリは、モジュール化、パフォーマンス、その他の機能を提供します.パパパで
lodashによってJavaScriptとして使用する方法を容易に使用して翻訳することができる.
詳細については、「文書」を参照してください。
ここで使用される
throttle
は、1000(1秒)の時間でコールバック関数および時間を決定することができる.スクロールする場合は、1秒以内にコールバック関数を実行する必要があります.この機能を使用して、dispatch
不要な部分を防いだ.
最後は2回連続で歌ったようですが、歌は間違いありません.
これは、スクロールによる不要な派遣を防止するという意味ではありません.
動作を実行するには、条件に従って派遣しなければならない.
if (loadPostsMore && !loadPostsLoading) {
dispatch(
postsLoad({
lastId,
}),
);
}
loadPostsMore
-記事を読み込める状態loadPostsLoading
-記事を読み込み中上記の条件に従って、
loadPostsMore
に記載可能な文章があれば、true
の状態を維持し続ける.loadPostsLoading
は、文書をサーバに要求したときにpending
の状態にあることを意味する.デフォルトのステータスはtrue
ですが、記事を読み込んでfulfilled
になると、ステータスをfalse
に変更するので、2つの条件を満たすので、記事を読み込みます.Lastidはどのように使用しますか?
LasIdには、現在読み込まれている記事の最後に読み込まれた記事のid値があります.
backサーバにこの値を要求すると、クエリーとして送信されます.backサーバでどのように行われているかを理解しましょう.
Back
次のルータを最初にロードして実行すると、クエリー・リストに0が送信されます.デフォルト値にスクロールすると、lastIdの値がクエリー・リストに渡されます.では、クエリリストが0より大きい場合、ルータはそれをスクロールと見なしてlastIdより小さいIDの文章をロードします.
// back/routes/posts
router.get('/', async (req, res, next) => {
try {
// 초기 조건은 없는 상태
const where = {};
// req.query가 0보다 클 경우 (즉, 스크롤링 시)에 where에 조건 추가
if (parseInt(req.query.last, 10) > 0) {
// 마지막 포스트의 id값 보다 작은 포스트를 불러오기
where.id = { [Op.lt]: parseInt(req.query.last, 10) };
}
// 최초 로드일 때는 order 순으로 9개를 불러온다.
// 추후 스크롤링 시에는 마지막 id보다 작은 포스트를 order순으로 9개를 불러온다.
const post = await Post.findAll({
where,
order: [
['createdAt', 'DESC'],
],
limit: 9,
// ...
});
res.status(200).json(post);
} catch(error) {
console.error(error);
next(error);
}
});
これにより、スクロールイベントを用いてINFINITEスクロールが実現される.スクロールアクティビティは良い方法ではありません...時間が多ければもっと良い方法で実現したい.
Reference
この問題について(INFINITEスクロール), 我々は、より多くの情報をここで見つけました https://velog.io/@xka926/인피니트-스크롤링テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol