реквизиты для доступа к реакторному маршрутизатору в mapDispatchToProps - PullRequest
0 голосов
/ 08 декабря 2018

как получить доступ к history реквизиту из mapDispatchToProps

import { withRouter } from "react-router-native";

const mapDispatchToProps = (dispatch, ownProps) => ({
   doSomething: () => ownProps.history.goBack() // history is undefined ...?? 
})

export default withRouter(connect(undefined, mapDispatchToProps)(MyComponent))

более понятно, как получить доступ к react-router контекстным реквизитам из connect mapDispatchToProps метода, docs говорит:

Если ваша функция mapDispatchToProps объявлена ​​как принимающая два параметра, она будет вызываться с диспетчеризацией в качестве первого параметра, а реквизиты, передаваемые подключенному компоненту в качестве второгопараметр

Обновление:

Вот что react-router документы говорит об этом

В большинстве случаев вы можете использовать Link, NavLink и Redirect для выполнения действий навигации.Иногда вам также может понадобиться выполнить программную навигацию после некоторой асинхронной задачи, которая первоначально была инициирована действием.Например, вы можете отправить действие, когда пользователь отправляет форму входа.Затем ваш обработчик thunk, saga или другой асинхронный обработчик аутентифицирует учетные данные, после чего ему необходимо каким-то образом перейти на новую страницу в случае успеха.Решение здесь состоит в том, чтобы просто включить объект истории (предоставленный всем компонентам маршрута) в полезную нагрузку действия, и ваш асинхронный обработчик может использовать его для навигации, когда это необходимо.

, очевидно, нетподдержка внешнего контекста внутри подключенного компонента, и необходимо найти правильную работу вокруг.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Для любого, кто столкнется с этой проблемой, вы можете получить доступ к react-router контекстным реквизитам из ownProps в mapDispatchToProps, но убедитесь, что ваш подключенный компонент имеет одно из следующих значений:

  1. Передается в качестве компонента prop к Router как <Route component = { MyConnectedComponent }/>
  2. Если это не прямой маршрут, но вложенный глубоко и требуетreact-router реквизит, заверните его в withRouter()
0 голосов
/ 08 декабря 2018

Альтернативный способ достижения этого приведен ниже, но сначала проверьте, есть ли история в подпорках, используя console.log.

const mapDispatchToProps = (dispatch, ownProps) => ({
 doSomething: (history) => history.goBack() // history is undefined ...?? 
})

что-то подобное вы можете сделать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...