Я применяю пример навигации без навигационной опоры из документов реагирования на навигацию ( NavigationService ), но я не могу заставить его работать с реагировать-i18следующий .
Я применил пример документации https://reactnavigation.org/docs/en/navigating-without-navigation-prop.html в своем коде:
// App.js
import React from 'react';
import { Provider } from 'react-redux';
import { PersistGate } from 'redux-persist/lib/integration/react';
import { createAppContainer } from 'react-navigation';
import { I18nextProvider, withNamespaces } from 'react-i18next';
import { persistor, store } from './src/store';
import I18n from './src/localization';
import Navigation from './src/navigation';
import NavigationService from './src/navigation/NavigationService';
import Loader from './src/screens/components/Loader';
class NavigationStack extends React.Component {
static router = Navigation.router;
render() {
const { t } = this.props;
return <Navigation screenProps={{ t, I18n }} {...this.props} />;
}
};
const ReloadNavOnLanguageChange = withNamespaces(['common', 'server'], {
bindI18n: 'languageChanged',
bindStore: false,
})(createAppContainer(NavigationStack));
export default class App extends React.Component {
...
render() {
return (
<Provider store={store}>
<PersistGate loading={<Loader />} persistor={persistor}>
<I18nextProvider i18n={ I18n } >
<ReloadNavOnLanguageChange ref={navigatorRef => {
NavigationService.setTopLevelNavigator(navigatorRef);
}} />
</I18nextProvider>
</PersistGate>
</Provider>
);
};
};
// Navigation.js
...
export default Navigation = createSwitchNavigator(
{
AuthLoading: AuthLoadingScreen,
Login: LoginScreen,
App: AppScreen
},
{
initialRouteName: 'AuthLoading'
}
);
// NavigationService.js
Apply the same code that's in https://reactnavigation.org/docs/en/navigating-without-navigation-prop.html
// Any JS module of my project (actions, helpers, components, etc.)
import NavigationService from 'path-to-NavigationService.js';
...
NavigationService.navigate('Login');
Когда токен авторизации проверен и результат отрицательный, экран входадолжен быть открыт (NavigationService.navigate('Login')
), но он возвращает ошибку _navigator.dispatch is not a function
в NavigationService.js:
const navigate = (routeName, params) => {
// DISPATCH ERROR
_navigator.dispatch(
NavigationActions.navigate({
routeName,
params
})
);
};
Зависимости:
- реагирует 16.5.0
- response-native 57.1
- реагировать-i18следующий 9.0.0
- реагировать-навигация 3.1.2
Есть предложения?Кто-нибудь еще нашел этот сценарий?