React native 在react navigation中将参数从屏幕传递到另一个嵌套堆栈
我在设置导航时遇到了一些困难。这一切都从包含两个选项的抽屉菜单开始,React native 在react navigation中将参数从屏幕传递到另一个嵌套堆栈,react-native,react-navigation,React Native,React Navigation,我在设置导航时遇到了一些困难。这一切都从包含两个选项的抽屉菜单开始,home和clients function MenuDrawerScreen() { return ( <MenuDrawer.Navigator initialRouteName="home" headerMode="screen" drawerType="front"> <MenuDrawer.Scr
home
和clients
function MenuDrawerScreen() {
return (
<MenuDrawer.Navigator initialRouteName="home" headerMode="screen" drawerType="front">
<MenuDrawer.Screen name="home" component={HomeScreen} />
<MenuDrawer.Screen name="clients" component={ClientsScreen} />
</MenuDrawer.Navigator>
);
}
在概览页面中按下客户机时,我打开详细信息页面并将客户机作为参数传递:
onPress={() => navigation.navigate('details', {client: client}) }
在Detail屏幕中,我现在可以访问用户:
const { client } = route.params;
<Text> Details of {client.firstName}</Text>
单击客户机时,调用setClient
,概览屏幕切换到详细信息屏幕。这非常有效,除非我想导航回概览
我添加了一个标题按钮以导航回概览页面。当我单击此按钮时,我会执行setClient(null)
操作,以便重新打开概览页面。打开的概览是正确的,但不是返回概览(页面从左侧滑入),而是从右侧滑入,这不是我想要的流程。我想回到总览,让它从左边滑进去
如果我坚持使用上下文,我能做到这一点吗?或者我可以简单地使用第一种方法,并找到一种将用户传递到嵌套选项卡堆栈的方法吗?任何帮助都将不胜感激。提前谢谢
const { client } = route.params;
<Text> Details of {client.firstName}</Text>
function ClientsScreen() {
return (
<ClientStack.Navigator initialRouteName="Overview" headerMode="screen">
<ClientStack.Screen name="overview" component={OverviewScreen} />
<ClientStack.Screen name="details" component={ClientTabsScreen}/>
</ClientStack.Navigator>
);
}
function ClientTabsScreen() {
return (
<ClientTabs.Navigator initialRouteName="general" headerMode="screen">
<ClientTabs.Screen name="general" component={GeneralScreen}/>
<ClientTabs.Screen name="financial" component={FinancialScreen} />
</ClientTabs.Navigator>
);
}
function ClientsStackScreen({ navigation }) {
const [client, setClient] = React.useState(null);
const clientContext = React.useMemo(() => ({ client, setClient}), [client]);
return (
<ClientContext.Provider value={ clientContext }>
<ClientStack.Navigator initialRouteName="overview" headerMode="screen">
{client ? ( // If client is selected open the details, otherwise open the overview
<ClientStack.Screen name=details component={ClientTabsScreen} />
) : (
<ClientStack.Screen name="overview" component={OverviewScreen} />
)}
</ClientStack.Navigator>
</ClientContext.Provider>
);
}