将多个堆栈导航器中常见的所有屏幕放在哪里?- 反应导航 v5

Aye*_*har 13 reactjs react-native react-navigation react-navigation-stack react-navigation-v5

以下是我的应用程序导航器的层次结构

???appNavigator(底部标签导航器)

  • ???提要(堆栈导航器)

    • 后详细信息屏幕
    • 页面详细信息屏幕
    • 配置文件详细信息屏幕
    • ...其他屏幕
  • ???通知(堆栈导航器)

    • 配置文件详细信息屏幕
    • 页面详细信息屏幕
    • 发布详细信息屏幕
    • ...其他屏幕
  • ???个人资料(堆栈导航器)

    • 配置文件详细信息屏幕
    • 页面详细信息屏幕
    • 发布详细信息屏幕
    • ...其他屏幕

现在的问题是我必须复制所有堆栈中通用的屏幕(ProfileDetail、PostDetail 和 PageDetail),以便在堆栈中访问它们。

对于此用例,是否有更好的解决方案。我应该在哪里放置通用屏幕,以便它们在所有子堆栈中可用,并且我不必在任何地方复制它们。

这是我经历的一个开放的 github 问题,但找不到好的解决方案 Isuue

Sha*_*san 0

由于您有多个公共屏幕和一些不同的数据(标题、描述等),因此您只能创建一个具有多个屏幕的公共堆栈导航器,然后您可以从其他任何地方调用它。

你的堆栈导航器可以是这样的:

export default class StackNavigator extends React.Component {

    render() {

        const { stackName1, stackComponent1, stackName2, stackComponent2, stackName3, stackComponent3 } = this.props;

        // console.log("props");
        // console.log(stackName1);
        // console.log(stackComponent1);

        return (
            <Stack.Navigator initialRouteName={stackName1}>
                <Stack.Screen
                    name={stackName1}
                    component={stackComponent1}
                    initialParams={{key: "value"}}
                />
                <Stack.Screen
                    name={stackName2}
                    component={stackComponent2}
                    initialParams={{key: "value"}}
                />
                <Stack.Screen
                    name={stackName3}
                    component={stackComponent3}
                    initialParams={{key: "value"}}
                />
            </Stack.Navigator>
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

然后从任何屏幕(提要、通知、个人资料)调用导航器:

<StackNavigator stackName1="PostDetailScreen" stackComponent1={PostDetailScreen} stackName2="PageDetailScreen" stackComponent2={PageDetailScreen} stackName3="ProfileDetailScreen" stackComponent3={ProfileDetailScreen}/>
Run Code Online (Sandbox Code Playgroud)

另外,如果您想从堆栈导航器向每个页面发送额外的参数,您可以将initialParams={{key: "value"}}我添加到堆栈导航器的每个屏幕中的参数发送给您。如果您想从特定屏幕接收此道具,只需访问此处this.props.route.params.key描述的密钥即可。

如果堆栈上有更多屏幕,则可以在数组中传递组件信息。