React Native 获得屏幕“搜索”的“组件”和“子”道具,您必须只通过其中一个

bfrts1fy  于 2022-11-30  发布在  React
关注(0)|答案(3)|浏览(144)

我在一个react-native应用上工作,这个项目使用react-navigation 4.x来导航这个应用。我最近把这个项目升级到了react-navigation的5.x,在升级的时候我遇到了一个问题。问题是我的项目同时有一个FooterNavigator和一个DrawerNavigator,它们都调用了同一个组件。
我们已经找到了一种方法来解决react-navigation 4.x中的问题,但是react-navigation的新版本需要为每个Screen指定一个名称和一个组件。有没有办法让我同时拥有两个导航器,或者降级更好?
Image of the error
这是我的页脚导航器

const Tab = createBottomTabNavigator();

    export const FooterNavigator = () => {
        return (
                <Tab.Navigator>
                    <Tab.Screen name="Search" component={Search}>
                        <Button>
                                <Icon name="magnify" type="MaterialCommunityIcons"/>
                              <Text style={footerStyle.footerText}>Zoeken</Text>
                        </Button>
                    </Tab.Screen>
                    <Tab.Screen name="Count" component={Count}>
                        <Button>
                                <Icon name="counter" type="MaterialCommunityIcons"/>
                                <Text style={footerStyle.footerText}>Tellen</Text>
                        </Button>
                    </Tab.Screen>
                    <Tab.Screen name="Identify" component={Identify}>
                        <Button>
                                <Icon name="file-question" type="MaterialCommunityIcons"/>
                                <Text style={footerStyle.footerText}>Herken</Text>
                        </Button>
                    </Tab.Screen>
                    <Tab.Screen name="Program" component={Program}>
                        <Button>
                                <Icon name="chip" type="MaterialCommunityIcons"/>
                                <Text style={footerStyle.footerText}>Wijzig</Text>
                        </Button>
                    </Tab.Screen>
                </Tab.Navigator>
        )
    }

这是我的DrawerNavigator

export const RootNavigator = () => {
    let DrawerScreens = [];
    Routes.forEach(function (route) {
        DrawerScreens.push(<Drawer.Screen name={route.name} component={route.component}/>)
    });
    return (

        <Drawer.Navigator>
            {DrawerScreens}
        </Drawer.Navigator>
    )
}

它们都在我的Layout.js中调用和呈现

render() {
        return (
            <NavigationContainer>
                <RootNavigator />
                <FooterNavigator/>
            </NavigationContainer>
        )
    }

非常感谢!

avwztpqn

avwztpqn1#

用这个

<Stack.Screen name="Home" component={HomeScreen} />

"而不是这个"

<Stack.Screen name="Home" component={HomeScreen}> </Stack.Screen>

解决您问题

<NavigationContainer>
    <Stack.Navigator initialRouteName="Home">
      <Stack.Screen name="Home" component={HomeScreen}/>
      <Stack.Screen name="Details" component={DetailScreen} />
    </Stack.Navigator>
  </NavigationContainer>
rfbsl7qr

rfbsl7qr2#

只需从堆栈屏幕中删除组件属性。如果您正在通过导航堆栈传递自定义值

ma8fv8wu

ma8fv8wu3#

当我使用一个<Stack.Screen>并向它提供一个组件和一个子组件时,我会得到这个错误,正如错误中提到的那样。

<Stack.Screen name="Home" component={Home}>
        {props => <Home {...props} sampleProperty="XXXXXXXX" />}
</Stack.Screen>

移除第1行上的该位component={Home}修复了该错误。

相关问题