169 похожих чатов

Добрый день, я пытаюсь добавить что-то похожее на infinite scroll к

списку элементов с pagination. надо чтобы дойдя до последнего элемента, оно перешло на следующую "страницу".
<div className={cn("w-col w-col-4", styles.info_container)} >
<div className={styles.property_container} onScroll={()=> {
console.log('scrolling!');
}}>
{pagedListings.map((property) => (
<Property
key={property.id}
id={property.id}
price={property.original_price}
imgUrl={property.medium_photo_url}
address={property.address}
permalink={property.permalink}
bedRooms={property.total_bedrooms}
bathRooms={property.total_full_baths}
acre={property.acre}
handleClick={handleClick}
/>
))}
{!pagedListings.length && (
<h2 className={styles.no_result}>No Result</h2>
)}
</div>
<ReactPaginate
previousLabel={previousSVG}
nextLabel={nextSVG}
breakLabel="..."
breakClassName="break-me"
pageCount={pageCount}
marginPagesDisplayed={1}
pageRangeDisplayed={4}
containerClassName="pagination"
subContainerClassName="pages pagination"
activeClassName="active"
initialPage={0}
onPageChange={handlePageClick}
/>
</div>

подключил console.log() к onScroll. дальше не понятно что делать. мне нужны refs и react-dom или можно что-то поумнее придумать?

2 ответов

12 просмотров

(Сорри, код сложно в сообщении читать с телефона) Я бы сделал так: Повесил бы ref на лист контейнер На скролл бы бы повесил коллбек с троттлом на animationframe а лучше миллисекунд на 200 Внутри коллбека брал бы boundingClientRect у последнего элемента, который ты можешь найти в контейнере. Дальше на основе данных смотрел бы грузить или нет

Делается просто и умно если использовать rxjs) впринципе без него тоже не очень геморно Если ожидается, что лист очень большой будет то лучше посмотреть на virtual table/list компонент какой нить опенсорсный, там конечно со всем этим будет посложнее Если хочется обойтись без reflow от geboundingclientrect, то можно записывать на обновление листа положение последнего элемента и без троттла (но лучше все же с троттлом) обновлять его используя ивент скролла (там всякие дельты должны быть) (только вне стейта компонента обновлять, пожалуйста) и производить дальнейшие действия уже с готовым значением.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта