React Native, перейдите на вложенную вкладку из корня

#react-native #react-navigation #react-navigation-bottom-tab

#react-native #react-навигация #react-navigation-bottom-tab

Вопрос:

Структура моей навигации по реакции

DashboardScreen => 3 Bottom Tabs (1 out of 3, again have) => 2 Bottom Tabs

У DashboardScreen них есть три BottomTabs

  1. Main

  2. Profile

  3. Products , Products у них снова два BottomTabs

    a. AllProducts

    b. SoldProducts

Что я хочу сделать, так это то, что когда продукт будет продан, владелец продукта получит уведомление, и onNotificationOpened DashboardScreen.js я хочу перейти к SoldProducts нему. OneSignal onNotificationOpened зарегистрирован в DashboardScreen.js . (Насколько я знаю, это экран, на котором я должен реализовать работу своего OneSignal, у меня здесь есть еще три случая.)

DashboardScreen.js

 useEffect(() => {
    if (isLoading) {
      loadUserDetail();
    }
    OneSignal.init(ONE_SIGNAL_APP_ID, {
      kOSSettingsKeyAutoPrompt: false,
      kOSSettingsKeyInAppLaunchURL: false,
      kOSSettingsKeyInFocusDisplayOption: 2,
    });
    OneSignal.inFocusDisplaying(2);
    OneSignal.addEventListener('received', onReceived);
    OneSignal.addEventListener('opened', onOpened);
    OneSignal.addEventListener('ids', onIds);
}, [isLoading, loadUserDetail, navigation, onOpened]);


const onOpened = useCallback((openResult) => {
    const additionalData = openResult.notification.payload.additionalData;
    if (additionalData.type === 'sold') {
        // From here I want to navigate
        console.log('DashboardScreen, Move to Product Tab, and open SOLD PRODUCT TAB, instead of All Products Tab');
    }
}, []);

return (
    <Tab.Navigator
      initialRouteName="Main"
      lazy={true}
      tabBar={(props) => (
        <CustomTabBar />
      )}>
      <Tab.Screen name="Profile" component={Profile} />
      <Tab.Screen name="Main" component={Main} />
      <Tab.Screen name="Products" component={Products} />
    </Tab.Navigator>
);
  

Решения, которые я пробовал до сих пор, это

 navigation.dispatch(
  NavigationActions.navigate({
    routeName: 'DashboardScreen',
    action: NavigationActions.navigate({
      routeName: 'Products',
    }),
  }),
);
  

Но это даже не открытие Products on DashboardScreen .

Также найдено

 TabActions.jumpTo('Tab')
  

но TabActions работает только в TabComponenet , означает внутри Main или Profile для переключения между Tabs

Любая помощь будет высоко оценена.

Комментарии:

1. вы пробовали navigation.navigate(‘Products’) ? переключает ли она вкладку?

2. Да, я пытался. Но navigation.navigate('Products') from DashboardScreen.js не работает. Это не навигация и не выдает никаких ошибок.