Реактивная навигация получает параметр из глубокой ссылки не работает - PullRequest
0 голосов
/ 24 апреля 2019

Я настроил свой маршрутизатор как:

const SwitchRouter = createSwitchNavigator(
  {
    Splash: {
      screen: Launch,
      path: 'hello/:code',
    },
    App: HomeStack,
  },
  {
    initialRouteName: 'Splash',
  }
);

Я использую ссылку в Safari, которая запускает мое приложение для iOS, а затем я должен получить параметр по этой ссылке в моем коде.

Я пробовал разные ссылки, но не смог получить от них никаких параметров. Вот что я попробовал:

  • myApp://hello/123
  • myApp://hello/?code=123
  • myApp://hello?code=123

Мой код, который должен получить этот code parementer, находится на моем экране запуска, как показано ниже:

const code = navigation.getParam('code', 'error');

Значение кода всегда является ошибкой, мой параметр здесь никогда не найден. Я что-то здесь упускаю? Я прошел через весь GitHub и документацию о реагирующей навигации, но я не смог найти решение, работающее на меня.

Я читал, что у некоторых людей возникают проблемы с получением параметров глубокого связывания в componentDidMount. Видимо они не доступны. Поэтому мой код отвечает за получение параметра «code». Я пытался использовать его внутри componentDidMount / DidUpdate и даже в рендере, но во всех случаях я не могу получить свой параметр.

1 Ответ

1 голос
/ 25 июня 2019

Я понял, что вы не можете передавать параметры Deeplink на первый / начальный экран.Вместо этого вы должны использовать прокси:

const SwitchRouter = createSwitchNavigator(
{
    CodeScreen: {
       Screen: Code,
       path: 'code/:code',
    }
    Splash: {
       screen: Launch,
       path: 'hello',
    },
    App: HomeStack,
   },
   {
     initialRouteName: 'Splash',
   }
});



class Code extends Component {

constructor(props) {
    super(props);

    const {navigation} = this.props;
    const code = navigation.getParam('code', false);

    navigation.navigate('hello', {code});

}

render() {
    return (
        <View>

        </View>
    );
}

}

Теперь вы получаете параметр code в вашем SplashScreen.

...