Реагируйте, вызывая навигацию из вложенных компонентов

#reactjs

Вопрос:

Я новичок в React/RN и понимаю, как работает навигация, но на самом деле не вижу рекомендаций по запуску навигации с помощью тривиального компонента, такого как случайная кнопка где-то, которая должна вызвать изменение маршрута.

Допустим , эта кнопка вложена в набор элементов, которые находятся под набором <Tab.Navigator> , которые находятся под набором <Stack.Navigator> и т. Д. Пара макетов экрана в глубину. Этот элемент не может получить доступ this.props.navigation . Поэтому моя идея состоит в том, чтобы отправить вверх. Но это может означать передачу onPress обработчика, например, на 5 или 6 слоев вниз. Это правильный путь? Должен ли я передавать его только от родителя, ближайшего к навигатору, или полностью App.tsx ?

Ответ №1:

Если вы не можете использовать <Link> компонент, то вам следует использовать объект истории.
Например, useHistory крючок вернет его ( всякий раз, когда вы будете импортировать),
так что ваш компонент может быть вложен как черт.

 import { useHistory } from 'react-router-dom'

function HomeButton() {
  const history = useHistory()

  function handleClick() {
    history.push('/home')
  }

  return (
    <button type="button" onClick={handleClick}>
      Go home
    </button>
  )
}