izi*_*drw 27 react-native react-navigation
使用反应导航,从导航器中的屏幕导航到不同导航器中的屏幕.
如果我有以下导航器结构:
如何从嵌套导航器2下的屏幕D转到嵌套导航器1下的屏幕A?现在,如果我尝试navigation.navigate从屏幕D屏幕A,将会出现一个错误,表示它不知道屏幕A,只有屏幕C和D.
我知道这已被要求以各种形式在本网站上的各个地方以及GitHub上(https://github.com/react-navigation/react-navigation/issues/983,https://github.com/react-导航/ react-navigation/issues/335#issuecomment-280686611)但是对于那些基本的东西,缺乏明确的答案并滚动浏览数百个GitHub评论搜索解决方案并不是很好.
也许这个问题可以编写如何为每个遇到这个非常常见问题的人做这件事.
mah*_*man 64
在 React Navigation 5 中,通过将屏幕作为第二个参数传入,这变得更加容易:
navigation.navigate('Nested Navigator 2', { screen: 'screen D' });
Run Code Online (Sandbox Code Playgroud)
如果您有深层嵌套的屏幕,您还可以包含其他级别:
navigation.navigate('Nested Navigator 2', {
screen: 'Nested Navigator 3', params: {
screen: 'screen E'
}
});
Run Code Online (Sandbox Code Playgroud)
Sta*_*kia 35
您可以使用speficy子操作的第三个参数navigate.
例如,如果要从嵌套导航器2下的屏幕D转到嵌套导航器1下的屏幕A:
this.props.navigation.navigate('NestedNavigator1', {}, NavigationActions.navigate({ routeName: 'screenB' }))
Run Code Online (Sandbox Code Playgroud)
此外,如果您使用的是嵌套导航器,请务必查看v2文档中的常见错误部分.
Abo*_*zlR 15
navigation.navigate('Home', {
screen: 'Profile',
params: {userID: 1}
}
)
Run Code Online (Sandbox Code Playgroud)
考虑这个结构:
NAVIGATOR:
*StackA
*ScreenC
*ScreenD
*StackB
*ScreenI
*StackE
*ScreenF
*StackG
*ScreenJ
*ScreenH
Run Code Online (Sandbox Code Playgroud)
我们希望从 StackA 中的 ScreenC 一直到 StackB 中的 ScreenH。我们实际上可以将参数链接在一起以访问特定的屏幕。
navigation.navigate('StackB',{
screen: 'StackE',
params: {
screen: 'StackG',
params: {
screen: 'ScreenH'
}
}
}
)
Run Code Online (Sandbox Code Playgroud)
Phi*_*ews 13
React Navigation v3:
Navigation.navigate现在将一个对象作为参数。您设置堆栈名称,然后按以下步骤导航到该堆栈中的路由...
navigation.navigate(NavigationActions.navigate({
routeName: 'YOUR_STACK',
action: NavigationActions.navigate({ routeName: 'YOUR_STACK-subRoute' })
}))
Run Code Online (Sandbox Code Playgroud)
创建您的堆栈时,“ YOUR_STACK”就是您要调用的堆栈...
YOUR_STACK: createStackNavigator({ subRoute: ... })
Run Code Online (Sandbox Code Playgroud)
Roc*_*uza 11
在 React Navigation v5 上,你有所有的解释:
https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested-navigator
路线定义
function Root() {
return (
<Stack.Navigator>
<Stack.Screen name="Profile" component={Profile} />
<Stack.Screen name="Settings" component={Settings} />
</Stack.Navigator>
);
}
function App() {
return (
<NavigationContainer>
<Drawer.Navigator>
<Drawer.Screen name="Home" component={Home} />
<Drawer.Screen name="Root" component={Root} />
</Drawer.Navigator>
</NavigationContainer>
);
}
Run Code Online (Sandbox Code Playgroud)
操作说明
navigation.navigate('Root', { screen: 'Settings' });
Run Code Online (Sandbox Code Playgroud)
在React Navigation v5 中,您可以执行以下操作:
navigation.navigate('Root', {
screen: 'Settings',
params: {
screen: 'Sound',
params: {
screen: 'Media',
},
},
});
Run Code Online (Sandbox Code Playgroud)
在上述情况下,您要导航到媒体屏幕,它位于嵌套在声音屏幕内的导航器中,它位于嵌套在设置屏幕内的导航器中。
小智 6
反应导航 v6
function Home() {
return (
<Tab.Navigator>
<Tab.Screen name="Feed" component={Feed} />
<Tab.Screen name="Messages" component={Messages} />
</Tab.Navigator>
);
}
function App() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen
name="Home"
component={Home}
options={{ headerShown: false }}
/>
<Stack.Screen name="Profile" component={Profile} />
<Stack.Screen name="Settings" component={Settings} />
</Stack.Navigator>
</NavigationContainer>
);
}
Run Code Online (Sandbox Code Playgroud)
navigation.navigate('Home', { screen: 'Messages' });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20392 次 |
| 最近记录: |