繁体   English   中英

如何在React Native中将createStackNavigator导出为类?

[英]How to export createStackNavigator as class in React Native?

在这里阅读可以将createStackNavigator用作Component类,并且我试图实现这一点,但是我总是遇到错误。

代替这个:

export default createStackNavigator({
    Messages
}, {
    defaultNavigationOptions: {
        gesturesEnabled: false
    }
})

我尝试了这个:

class MessagesStack extends React.Component {
    render() {
        const RouteConfigs = {
            Messages
        };

        const NavigatorConfigs = {
            defaultNavigationOptions: {
                gesturesEnabled: false
            }
        };

        const Stack = createStackNavigator(RouteConfigs, NavigatorConfigs);
        return <Stack />;
    }
}

export default MessagesStack;

但是我总是会收到这个错误:

Invariant Violation: Invariant Violation: The navigation prop is missing for this navigator. In react-navigation 3 you must set up your app container directly. More info: https://reactnavigation.org/docs/en/app-containers.html

因此,我尝试通过添加导航道具来更正它,如下所示:

return <Stack navigation={this.props.navigation} />;

但是后来我得到了一个新错误

TypeError: TypeError: No "routes" found in navigation state. Did you try to pass the navigation prop of a React component to a Navigator child? See https://reactnavigation.org/docs/en/custom-navigators.html#navigator-navigation-prop

这可能吗? 我想要这样做的主要原因是能够@inject并将@observer用于mobx存储。 这样,当我更改商店中的背景颜色时,它将在注入商店并正在观察的每个堆栈中发生变化。

编辑

我从以下位置调用MessagesStack的位置:

export default createBottomTabNavigator({
    DayStack: {
        screen: DayStack,
        navigationOptions: {...}
    }
    MessagesStack: {
        screen: MessagesStack,
        navigationOptions: {...}
    }
    ... OtherStacks here...
}, {
    initialRouteName: 'DayStack',
});

根据我对错误的理解,我认为问题不在于您的createStackNavigator,实际的问题是,现在从反应导航的版本3开始,您必须手动将createStackNavigator传递到createAppContainer中,以便创建的Container可以用作反应原生渲染

import { createAppContainer, createStackNavigator } from 'react-navigation';
// you can also import from @react-navigation/native

const AppNavigator = createStackNavigator(...);

// you have to pass the app navigator into app container like this
const AppContainer = createAppContainer(AppNavigator);

// Now AppContainer is the main component for React to render

export default AppContainer;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM