Мое приложение использует библиотеку реакции-навигации для маршрутизации, но теперь у меня есть требование, в котором я хочу отображать модальное окно только над маршрутами, принадлежащими 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;



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Не проверено, но я бы попробовал следующее:
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 экранов, поэтому я искал способ оптимизации ;-) Тем не менее, поддержу ваш ответ, так как определенно можно было бы добавить поставщика ко всем индивидуальные экраны.
Это было довольно быстрое первое предположение, теперь я полностью понимаю проблему. Я должен был, вероятно, прокомментировать вместо этого, я ценю положительный отзыв, хотя, поскольку я новичок в React и счастлив, что мой ответ имеет смысл, даже если он не работает :)
Это не отвечает на вопрос.
Лучше всего, вероятно, создать новый навигатор вкладок, используя в качестве шаблона response-navigation-tabs / dist / navigators / createBottomTabNavigat или .js.