Как заставить Link из react-router скроллить к диву?

Имеется обычное меню с парой ссылкой. Некоторые из них ведут на отдельные страницы, а остальные должны скроллить к нужному диву на странице.

Рендерятся пункты меню так:
renderNav() {
    return menu.map((item, index) => {

      return (
        <li className='menu-item' key={index}>
          <Link to={`${item.link}`} className="menu-link" activeClassName="menu-link--is_active">{item.name}</Link>
        </li>
      )
    })
  }


Как победить Link? На ум приходят только некрасивые костыли, но не хочется их юзать
  • Вопрос задан
  • 2320 просмотров
Пригласить эксперта
Ответы на вопрос 1
1. В случае, если у Вас сложная логика: Link принимает свойство state, через него можно передавать идентификатор куда скролить, например.

Затем подписываетесь на history:
let unlisten = history.listen(location => {
  console.log(location.state); // <-- переданный в Link state.
})


Дальше любым известным Вам способом скролите к нужному элементу.
Но я бы Вам настоятельно советовал не выходить за рамки якорей (хэш в конце url) касаемо навигации.

2. Навигация с хешем:
Link принимает свойство hash, которое так-же можно получить подписавшись на history
<Link  to="some" hash="#idOfElement" >Scroll to</Link>

let unlisten = history.listen(location => {
  console.log(location.hash); // <-- переданный в Link hash.
})
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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