#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. Я не получаю параметры, когда мое приложение находится в фоновом режиме, вы знаете, почему?