我有两个导航器,一个Auth
是StackNavigator
包含SignInScreen
,一个App
是BottomTabNavigator
包含HomeScreen
,我想从HomeScreen
导航到SignInScreen
,并传递一些参数来指示来源。
我尝试了很多类似以下的代码。
navigation.navigate('Auth', { source: 'App' })
或
navigation.navigate(
'Auth',
{},
{
type: 'Navigate',
routeName: 'Auth',
params: { source: 'App' }
}
)
或
navigation.navigate(
'Auth',
{},
{
type: 'Navigate',
routeName: 'Auth',
action: {
type: 'Navigate',
routeName: 'SignInScreen',
params: { source: 'App' }
}
}
)
...
但是它们都不起作用。 navigation.getParam('source', null)
始终返回null。
更多信息 https://github.com/liudonghua123/expo-multi-screen-starter/blob/navigation_params_null/src/screens/HomeScreen.js#L22 https://github.com/liudonghua123/expo-multi-screen-starter/blob/navigation_params_null/src/screens/SignInScreen.js#L26
我还阅读了https://github.com/react-navigation/react-navigation/issues/143和https://github.com/react-navigation/react-navigation/issues/1237。
navigation.getParam('source', null)
返回实际的参数。我也将其发布在https://github.com/react-navigation/react-navigation/issues/6335上。
答案 0 :(得分:0)
最后,我需要将代码还原为navigation.navigate('Auth', { source: 'App' })
中的HomeScreen
,然后可以获得类似以下代码的参数。
const parent = navigation.dangerouslyGetParent();
let source = null;
if (parent && parent.state && parent.state.params) {
({ source } = parent.state.params);
}