Я пытаюсь перейти к определенному экрану в моем нижнем навигаторе вкладок, когда пользователь открывает приложение, щелкнув уведомление.
Просмотр официальных документов Навигация без средства навигации , моя настройка основного навигатора выглядит следующим образом:
import {navigationRef, isReadyRef} from './root';
const MainNav = _ => {
if (isLoading) {
return isFirstTime ? (<OnBoarding />) : (<SplashScreen />);
}
return (
<NavigationContainer
ref={navigationRef}
onReady={() => {isReadyRef.current = true}}>
{!token ? <AuthNav /> : <AppNav />}
</NavigationContainer>
);
}
My root. js выглядит следующим образом:
import * as React from 'react';
export const isReadyRef = React.createRef();
export const navigationRef = React.createRef();
export function navigate(name, params) {
if (isReadyRef.current && navigationRef.current) {
// Perform navigation if the app has mounted
navigationRef.current.navigate(name, params);
} else {
// You can decide what to do if the app hasn't mounted
// You can ignore this, or add these actions to a queue you can call later
console.log('Not mounted yet.')
}
}
И я добавил событие OneSignal слушатель в моем root index.js
следующим образом:
const App = _ => {
useEffect(() => {
OneSignal.addEventListener('opened', onOpened);
return () => OneSignal.removeEventListener('opened', onOpened);
}, []);
return {
<StoreProvider store={store}>
<MainNav />
</StoreProvider>
}
}
И моя onOpened
функция выглядит следующим образом:
import {navigate} from '../nav/root';
const onOpened = ({notification}) => {
if(notification.type == 'New Request'){
navigate('Notifications');
}
}
Но когда я тестирую его, как ожидалось Not mounted yet.
выводится на консоль. Итак, я хочу
добавить эти действия в очередь, которую вы можете вызвать позже
, как указано в официальных документах по навигации, но я не уверен, как это сделать. Я нашел response-native-queue , но он больше не поддерживается, и использование setTimeout кажется уродливым хаком, потому что время загрузки меняется. Итак, есть ли лучший подход или решение, которое я могу использовать для навигации только после завершения загрузки (я подумываю использовать для этого redux) и мои навигаторы были смонтированы (не знаю, как это сделать)?