Я использую реакцию 16.4, и мне нужно прокрутить до элемента DOM в приложении. Поскольку refs
теперь устарели в реакции, я ищу самый чистый способ добиться этого.
Но с моей точки зрения трудно найти решение без ref
, а также без прямого манипулирования DOM следующим образом:
document.getElementById("questions").lastElementChild.scrollIntoView({
behavior: "smooth"
});
Как в настоящее время лучше всего делать такие вещи?
с уважением
Вы все еще можете использовать React.createRef()
. Только ссылки на строки и обратные вызовы устарели/находятся в процессе устаревания.
import React, {Component, createRef} from 'react'
class App extends Component {
myRef = createRef() // Create a ref object
scrollToRef = () =>
window.scrollTo(0, this.myRef.current.offsetTop);
render() {
return <div ref = {this.myRef}></div>
}
}
React.createRef
был введен в 16.3
, поэтому вы можете использовать его. Поместите его на элемент и используйте метод scrollIntoView
для свойства current
, которое является узлом DOM.
Пример
class App extends React.Component {
bottomRef = React.createRef();
onClick = () => {
this.bottomRef.current.scrollIntoView();
};
render() {
return (
<div>
<button onClick = {this.onClick}>Scroll to bottom</button>
<div style = {{ height: 2000 }} />
<div ref = {this.bottomRef}>bottom</div>
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id = "root"></div>
Попробуйте компонент для анимации вертикальной прокрутки https://www.npmjs.com/package/react-scroll
refs не устарели, они просто изменили свой API. reactjs.org/docs/refs-and-the-dom.html