У меня есть виджет чата, который выдает массив сообщений каждый раз, когда я прокручиваю вверх. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что ползунок остается зафиксированным сверху при загрузке сообщений. Я хочу сосредоточиться на последнем элементе индекса из предыдущего массива. Я понял, что могу делать динамические ссылки, передавая индекс, но мне также нужно знать, какую функцию прокрутки использовать для достижения этой цели.
handleScrollToElement(event) {
const tesNode = ReactDOM.findDOMNode(this.refs.test)
if (some_logic){
//scroll to testNode
}
}
render() {
return (
<div>
<div ref="test"></div>
</div>)
}
javascript
reactjs
ecmascript-6
edmamerto
источник
источник
Ответы:
Реакт 16.8+, Функциональный компонент
Нажмите здесь для полной демонстрации по StackBlits
Реагировать 16.3 +, Класс компонента
Компонент класса - Ref обратный вызов
Не используйте строковые ссылки.
Строковые ссылки наносят вред производительности, не поддаются компоновке и находятся на выходе (август 2018 г.).
ресурс1 ресурс2
Необязательно: сгладить анимацию прокрутки
Передача ссылки ребенку
Мы хотим, чтобы ссылка была присоединена к элементу dom, а не к компоненту реакции. Таким образом, передавая его дочернему компоненту, мы не можем назвать опорный реф.
Затем прикрепите опору к элементу dom.
источник
window.scrollTo(0, offsetTop)
лучший вариант с лучшей поддержкой среди существующих браузеровэто сработало для меня
РЕДАКТИРОВАТЬ: Я хотел бы расширить это на основе комментариев.
источник
Просто найдите верхнюю позицию элемента, который вы уже определили https://www.w3schools.com/Jsref/prop_element_offsettop.asp, затем перейдите к этой позиции с помощью
scrollTo
метода https://www.w3schools.com/Jsref/met_win_scrollto.aspПримерно так должно работать:
ОБНОВИТЬ:
так React v16.3
React.createRef()
является предпочтительнымисточник
ReactDOM.findDomNode()
- лучшая практика - поскольку React выполняет рендеринг компонентов, элемент div, который вы просто получаете по его идентификатору, может не существовать к тому времени, когда вы вызываете функциюfindDOMNode
. В большинстве случаев вы можете прикрепить ref к узлу DOM иfindDOMNode
вообще не использовать его .this.myRef.current.scrollIntoView()
вместоwindow.scrollTo(0, this.myRef)
.Использование findDOMNode в конечном итоге будет устаревшим.
Предпочтительным методом является использование обратных ссылок.
Github Eslint
источник
Теперь вы можете использовать
useRef
API реагирования хукаhttps://reactjs.org/docs/hooks-reference.html#useref
декларация
составная часть
использование
источник
console.log
что он выполняет вашеwindow.scrollTo
заявление (с учетом моего случая), но пока не прокручивает. Может ли это быть связано с тем, что я использую модал React Bootstrap?Вы также можете использовать
scrollIntoView
метод для прокрутки к данному элементу.источник
Возможно, я опоздал на вечеринку, но я пытался правильно реализовать динамические ссылки в своем проекте, и все ответы, которые я нашел до тех пор, пока не знали, не удовлетворяют меня по вкусу, поэтому я нашел решение, которое, мне кажется, простой и использует родной и рекомендуемый способ реагирования для создания ссылки.
иногда вы обнаруживаете, что при написании документации предполагается, что у вас есть известное количество просмотров, и в большинстве случаев это число неизвестно, поэтому в этом случае вам нужен способ решения проблемы, создайте динамические ссылки на неизвестное количество просмотров, которое вам нужно показать в классе
поэтому самое простое решение, которое я мог придумать и работать безупречно, заключалось в следующем
таким образом, свиток перейдет в любую строку, которую вы ищете ..
ура и надеюсь, что это помогает другим
источник
Июль 2019 - выделенный крюк / функция
Выделенная ловушка / функция может скрывать детали реализации и предоставляет простой API для ваших компонентов.
Реакция 16.8 + функциональный компонент
Используйте его в любом функциональном компоненте.
полное демо
Реагировать 16,3 + класс Компонент
Используйте его в любом компоненте класса.
Полная демонстрация
источник
Вы можете попробовать так:
источник
Вы можете использовать что-то вроде
componentDidUpdate
источник
У меня был простой сценарий: когда пользователь нажимает на элемент меню в моей панели навигации пользовательского интерфейса для материалов, я хочу прокрутить их вниз до раздела на странице. Я мог бы использовать ссылки и пропустить их через все компоненты, но я терпеть не могу многопоточные реквизиты, потому что это делает код хрупким.
Я просто использовал vanilla JS в своем реактивном компоненте, оказалось, что он работает просто отлично. Поместил идентификатор в элемент, который я хотел прокрутить, и в своем компоненте заголовка я только что сделал это.
источник
Следуй этим шагам:
1) Установите:
2) импортировать пакет:
3) Использование:
источник
Вот фрагмент кода компонента класса, который можно использовать для решения этой проблемы:
Этот подход использовал ссылку, а также плавно прокручивается к целевой ссылке.
источник
Самый хороший способ - это использовать
element.scrollIntoView({ behavior: 'smooth' })
. Это прокручивает элемент в поле зрения с хорошей анимацией.Когда вы комбинируете его с React
useRef()
, это можно сделать следующим образом.Когда вы хотите перейти к компоненту React, вам нужно переслать ссылку на визуализированный элемент. Эта статья углубится в проблему .
источник
(ref) => window.scrollTo(0, ref.current.offsetTop)
но потом получил небольшое смещение от вершины и не достиг цели. Я полагаю, что это произошло потому, что местоположение рефери было рассчитано в начале, а затем не обновлено. Ваше предложение решило мою проблему, а принятый ответ - нет.Что сработало для меня:
источник
Просто наперед, я не мог заставить эти решения работать с компонентами пользовательского интерфейса. Похоже, у них нет
current
собственности.Я просто добавил пустую
div
среди моих компонентов и установил опорную ссылку на это.источник
источник
Для тех, кто читает это, кому не очень повезло с вышеупомянутыми решениями или просто хочет простое решение для встраивания, этот пакет работал для меня: https://www.npmjs.com/package/react-anchor-link- гладкой прокрутки . Счастливого взлома!
источник
Я использовал это внутри функции onclick для плавной прокрутки до div, где его id - "step2Div".
источник