使用带有 react-navigation Navigator 的 HOC

den*_*emm 6 javascript reactjs react-native react-navigation

我的应用程序使用 react-navigation 库进行路由,但现在我有一个要求,我只想在属于 TabNavigator 的路由上显示模式窗口。我认为如果我创建了一个高阶组件并使用它来包装 TabNavigator,这会起作用,但这似乎不起作用。

那么将功能添加到 react-navigation Navigator 的正确方法是什么?

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);
Run Code Online (Sandbox Code Playgroud)

路由.js

TabNavigator 是 SwitchNavigator 的一部分,但只有选项卡的路由才能显示模态。

import TabRoutes from './routes/TabRoutes';

const AppRoutes = createSwitchNavigator({
  Loading: LoadingScreen,
  Auth: AuthStack,
  App: TabRoutes,
}, {
  initialRouteName: 'Loading'
});
Run Code Online (Sandbox Code Playgroud)

myProvider.js

const myProvider = (wrappedComponent) => {

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

export default myProvider;
Run Code Online (Sandbox Code Playgroud)

mar*_*oxx 2

未经测试,但我接下来会尝试这个:

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;
Run Code Online (Sandbox Code Playgroud)

...肯定是您想要包装的屏幕组件,而不是整个TabRoutes