Реагируйте с навигацией с помощью Deep Linking - проблема доступа к дочерним действиям и параметрам - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь заставить 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. Пожалуйста, помогите.

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