Использование HOC с навигатором React-Navigator

Мое приложение использует библиотеку реакции-навигации для маршрутизации, но теперь у меня есть требование, в котором я хочу отображать модальное окно только над маршрутами, принадлежащими TabNavigator. Я думал, что это сработает, если я создам компонент более высокого порядка и использую его для обертывания TabNavigator, но это, похоже, не работает.

Итак, как правильно добавить функциональность в навигатор с реактивной навигацией?

TabRoutes.js

Это отлично работает без поставщика, но маршруты становятся недоступными, как только я добавляю поставщика в TabNavigator.

import myProvider from './providers/myProvider';

const TabRoutes = createBottomTabNavigator({
  Main: {screen: HomeStack},
  Moments: {screen: MomentStack},
  Settings: {screen: SettingsRoutes}
},{
  initialRouteName: 'Main'
});

export default myProvider(TabRoutes);

Routes.js

TabNavigator является частью SwitchNavigator, но только маршруты вкладок должны иметь возможность отображать модальное окно.

import TabRoutes from './routes/TabRoutes';

const AppRoutes = createSwitchNavigator({
  Loading: LoadingScreen,
  Auth: AuthStack,
  App: TabRoutes,
}, {
  initialRouteName: 'Loading'
});

myProvider.js

const myProvider = (wrappedComponent) => {

  class extends React.Component {
    render (
      <View>
        <WrappedComponent {...this.props}>
        <MyModal visible = {...}>
          ... // rest of modal
        </MyModal>
      </View>
    );
  }
}

export default myProvider;

Лучше всего, вероятно, создать новый навигатор вкладок, используя в качестве шаблона response-navigation-tabs / dist / navigators / createBottomTabNavigat‌ или .js.

markmoxx 09.01.2019 16:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
1
1 931
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не проверено, но я бы попробовал следующее:

TabRoutes.js

import myProvider from './providers/myProvider';

const TabRoutes = createBottomTabNavigator({
    Main: {screen: myProvider(HomeStack)},
    Moments: {screen: myProvider(MomentStack)},
    Settings: {screen: myProvider(SettingsRoutes)}
},{
    initialRouteName: 'Main'
});

export default TabRoutes;

... как вы, конечно, хотите обернуть компоненты экрана, а не весь TabRoutes?

Это тот же результат, потому что все экраны TabNavigator сами являются StackNavigator. Конечно, я мог бы добавить поставщика к каждому компоненту экрана, но у меня более 30 экранов, поэтому я искал способ оптимизации ;-) Тем не менее, поддержу ваш ответ, так как определенно можно было бы добавить поставщика ко всем индивидуальные экраны.

dentemm 09.01.2019 15:50

Это было довольно быстрое первое предположение, теперь я полностью понимаю проблему. Я должен был, вероятно, прокомментировать вместо этого, я ценю положительный отзыв, хотя, поскольку я новичок в React и счастлив, что мой ответ имеет смысл, даже если он не работает :)

markmoxx 09.01.2019 16:05

Это не отвечает на вопрос.

David Castillo 23.04.2019 00:15

Другие вопросы по теме