Я пытаюсь заставить Deep Linking работать с React Navigation. Мой поток:
Пользователь нажимает на Deep Link
Приложение открывается
В моем навигаторе приложений я проверяю, пришел ли пользователь по Deep Link
Я делаю следующее:
const App = createSwitchNavigator({
MyDrawerNavigator: MyDrawerNavigator,
AuthLoading: AuthLoadingScreen,
Auth: AuthStack,
Main: MainTabNavigator,
Profile: ProfileNavigator,
ActivityListNav: {screen: ActivityListNavigator,
path: 'activity'},
},{
initialRouteName: 'AuthLoading',
})
const previousGetActionForPathAndParams = App.router.getActionForPathAndParams;
Object.assign(App.router, {
getActionForPathAndParams(path, params) {
//alert('path : ' + path + ' params : ' + params);
const isAuthLink = path.startsWith('activity');
//alert('isAuthLink : ' + isAuthLink);
if (isAuthLink) {
return NavigationActions.navigate({
routeName: 'AuthLoading',
params: { ...params, path },
});
}
return previousGetActionForPathAndParams(path, params);
},
});
const XYZApp = createAppContainer(App);
const prefix = 'https://XYZApp.com/referral/';
export default MainApp = () => <XYZApp uriPrefix={prefix} />;
Управление успешно передано компоненту AuthLoading. Вот что я делаю:
const params = this.props.navigation.state.params;
let action;
if (params && params.path) {
const routeParams = params;
const routeName = params.path;
action = NavigationActions.navigate({ routeName: routeName, params: routeParams });
}
if (!userToken){
this.fetchUserData();
}else{
this.props.navigation.dispatch(NavigationActions.navigate({
routeName:'PhoneAuth',
action,
}))
this.props.navigation.navigate('PhoneAuth')
}
Это успешно перемещает элемент управления в компонент PhoneAuth. Теперь, основываясь на том, что было передано в «действии», мне нужно двигаться дальше. Но я не могу понять, как извлечь ценность из действия. Я пробовал следующее:
const params = this.props.navigation.state.params;
const routeName = this.props.navigation.state.routeName;
const { navigation } = this.props;
const referrer = navigation.getParam('refereeName', 'NO-ID');
const childState = PhoneAuth.router.getStateForAction();
if (params && routeName){
return this.props.navigation.navigate(routeName, params);
}
Но здесь я получаю параметры с неопределенным значением и routeName как PhoneAuth вместо того, что было передано из Deep Link. Пожалуйста, помогите.