React Navigation получение параметра из глубокой ссылки не работает

#ios #react-native #react-navigation #deep-linking

#iOS #react-native #реакция-навигация #глубокое связывание

Вопрос:

Я настроил свой маршрутизатор следующим образом:

 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 параметр, находится на моем экране запуска, как показано ниже:

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

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

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

Ответ №1:

Я понял, что вы не можете передать параметры 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’ на своем заставочном экране.

Комментарии:

1. Я не получаю параметры, когда мое приложение находится в фоновом режиме, вы знаете, почему?