Реагировать на роутер, передавать данные при навигации программно?

Мы могли бы перейти к другому пути, используя

this.props.router.push('/some/path')

Есть ли способ отправить параметры (объект) при навигации?

Есть и другие варианты, о которых я могу думать, но интересно, возможно ли прохождение object?

  • Я мог встроить id объекта и восстановить объект с сервера с новой страницы.

  • Или я мог бы хранить объект в глобальном хранилище, например, в магазине redux. (Этот объект нужно скоро удалить из магазина. Поэтому я думаю, что это может быть нехорошо поставить его в первую очередь)

Ответ 1

React Router использует объекты location. Одним из свойств объекта location является state.

this.props.router.push({
  pathname: '/other-page',
  state: {
    id: 7,
    color: 'green'
  }
})

На странице, на которую выполняется переход, текущий компонент location будет введен в компонент, маршрут которого согласован, поэтому вы можете получить доступ к состоянию с помощью this.props.location.state.

Следует иметь в виду, что не будет state, если пользователь перейдет непосредственно на страницу, поэтому вам все равно потребуется какой-то механизм для загрузки данных, когда он не существует.

Ответ 2

Если вы используете React Router 4 или 5, текущие ответы устарели. Вызовите history.push и передайте объект как второй параметр для передачи состояния:

props.history.push('/other-page', { id: 7, color: 'green' }))

Затем вы можете получить доступ к данным о состоянии в "/other-page" через:

props.location.state

Ответ 3

Передача параметров запроса при программной навигации в ответном маршрутизаторе

Объекты истории могут использоваться программным образом для изменения текущего местоположения с использованием history.push и history.replace.

    history.push('/home?the=query', { some: 'state' })

Если мы передадим объект истории в компонент в качестве реквизита. Затем мы можем программно программировать, используя методы реагирования маршрутизатора, доступные в объекте history.

Теперь предположим, что вы передаете объект истории в качестве оповещения, называемой "маршрутизатор". Поэтому он будет ссылаться внутри компонента с синтаксисом на основе классов, например:

this.props.router

При использовании push или replace вы можете указать как путь URL, так и состояние как отдельные аргументы или включить все в один объект, похожий на местоположение, в качестве первого аргумента.

this.props.router.push('/some/path?the=query')

Или вы можете использовать один объект, подобный местоположению, для указания как URL-адреса, так и состояния. Это эквивалентно приведенному выше примеру.

this.props.router.push({
  pathname: '/some/path',  //path
  search: '?the=query' // query param named 'search'
})

Примечание. Конечно, убедитесь, что this.props.router на самом деле является объектом истории из agent-маршрутизатора api.

Ответ 4

Мне не удалось заставить это работать с реагирующим маршрутизатором v4+. Но работает следующее:

//I.e. add navigate using the history stack and pass context as the 2nd parameter
this.props.history.push('/takeTest', {
  subjectsList: this.props.subjectsList.filter(f => f.isChecked === true)
})

Ответ 5

Я не знаю, какую версию вы используете, но вы можете указать объект как параметр react-router:

let {router} = this.props;
router.push({pathname: "/newpath", query: {id: 1}) // will create the url /newpath?id=1

Ответ 6

если вы хотите отправить его в строке запроса

this.props.router.push({
  pathname: '/payment-history',
  query: {
    email: rowData.email
  }
})