Реагировать на навигацию без примера навигационных реквизитов не работает

У меня есть реагирующее приложение, и я использую новый Context API для управления хранилищем и прочим, теперь я оборачиваю createAppContainer(AuthNavigator) в <Provider>, созданный контекстным API, поэтому для перехода из файла Context API, Я попытался сделать тот же самый пример, который я нашел в документации, создав NavigationService и передав ref из AppContainer в NavigationService и используя { NavigationActions }, почему-то он не работает и не выдает никаких ошибок.

вот мой router.js

  const AuthNavigator = createSwitchNavigator(
    {
      Authenticated: Authenticated,
      UnAuthenticated: UnAuthenticated,
    },
    {
      initialRouteName: props.is_authenticated ? 'Authenticated' : 'UnAuthenticated'
    }
  )

  const Router = createAppContainer(AuthNavigator);

  return (

    <Provider style={{ width: '100%', height: '100%' }}>
      <Router ref={ ref => NavigationService.setTopLevelNavigator(ref) } />
      <DropdownAlert
        successColor="#26296A"
        titleStyle={{ fontFamily: 'DINNextLTArabic-Regular', lineHeight: 18, color: '#fff', textAlign: 'center' }}
        messageStyle={{ fontFamily: 'DINNextLTArabic-Regular', lineHeight: 16, color: '#fff', textAlign: 'center' }}
        imageStyle={{ display: 'none' }}
        ref={ (ref) => Flash.setDropDown(ref) }
      />
    </Provider>

  )

}

export default ReactNavigator;

вот мой файл службы навигации

import { NavigationActions } from 'react-navigation';

let navigator;

function setTopLevelNavigator(nav_ref) { navigator = nav_ref }

function navigate(route_name, params) {
  navigator.dispatch(
    NavigationActions.navigate({
      route_name,
      params
    })
  )
}

export default {
  navigate,
  setTopLevelNavigator
};

и вот провайдер, от которого я хочу перейти

это React Context API

import NavigationService from '@utils/navigation-service';

onReceived(notification) {

  console.warn(notification.payload.additionalData);

  console.warn('triggered');

  NavigationService.navigate('Chat');

}

person Abdul-Elah JS    schedule 07.02.2019    source источник
comment
Мне кажется, вы все настроили как надо. Мое единственное предположение состоит в том, что функция onReceived вызывается перед setTopLevelNavigator. Попробуйте добавить несколько console.logs в вышеуказанные функции, чтобы проверить, так ли это. Потому что, если сначала вызывается onReceived, ссылка на навигатор еще не установлена, поэтому вызов смены экранов завершится ошибкой.   -  person needsleep    schedule 08.02.2019
comment
На самом деле хороший, я попробую позже .. и отвечу   -  person Abdul-Elah JS    schedule 08.02.2019


Ответы (1)


Ваш route_name вместо этого должен быть routeName в соответствии с примером на веб-сайте с реакцией-навигацией (https://reactnavigation.org/docs/en/navigating-without-navigation-prop.html)

Им нужны ключи routeName и params специально для работы

person skyplor    schedule 26.07.2019