我已经实现了一个弹出窗口组件在一个标题与更多的选项按钮。此按钮仅在UserProfileScreen
上可用。当你按下它时,你会看到两个按钮:“设置”和“注销”。问题与设置按钮有关。
**预期行为:**按“设置”按钮-〉this。props.navigation.navigate('SettingsNavigator')被调用-〉显示SettingsScreen
**实际行为:**按下设置按钮-〉控制台。warn('go to settings')被调用,仅此而已(您不会被重定向到SettingsScreen)。
设置导航器。js
import React from 'react';
import { createStackNavigator } from 'react-navigation';
import SettingsScreen from './SettingsScreen';
import EditProfileScreen from './EditProfileScreen';
import RemoveProfileScreen from './RemoveProfileScreen';
const SettingsNavigator = createStackNavigator({
SettingsScreen: SettingsScreen,
EditProfile: EditProfileScreen,
RemoveProfile: RemoveProfileScreen
}, {
initialRouteName: 'SettingsScreen'
});
export default SettingsNavigator;
optionHeaderButton。js
import { withNavigation } from 'react-navigation';
...
class OptionsHeaderButton extends Component {
...
navigateToSettings = () => {
console.warn('go to settings')
this.props.navigation.navigate('SettingsNavigator');
}
render() {
return(
<Menu onSelect = {value => {
switch(value) {
case 'Settings':
this.navigateToSettings();
break;
case 'Logout':
this.onLogOutPress();
break;
}
}}>
<MenuTrigger>
<Icon name = 'dots-vertical' size = {24} color = {text}/>
</MenuTrigger>
<MenuOptions style = {optionsHeaderButtonStyle.menuWrapper}>
<MenuOption value = {'Settings'}>
<View style = {optionsHeaderButtonStyle.optionWrapper}>
<View style = {optionsHeaderButtonStyle.optionIcon}>
<IconSimpleLine name = 'settings' size = {12} color = {text}/>
</View>
<Text style = {[optionsHeaderButtonStyle.option, optionsHeaderButtonStyle.lastOption]}>
Settings
</Text>
</View>
</MenuOption>
<MenuOption value = {'Logout'}>
<View style = {optionsHeaderButtonStyle.optionWrapper}>
<View style = {optionsHeaderButtonStyle.optionIcon}>
<IconSimpleLine name = 'logout' size = {12} color = {text}/>
</View>
<Text style = {[optionsHeaderButtonStyle.option, optionsHeaderButtonStyle.lastOption]}>
Logout
</Text>
</View>
</MenuOption>
</MenuOptions>
</Menu>
)
}
}
export default withNavigation(OptionsHeaderButton);
OptionsHeaderButton
嵌套到嵌套在UserProfile组件中的Header组件。
据我所知,使用withNavigation()
,我可以从任何组件调用navigation.navigate()
。那为什么不起作用呢
更新:
经过调查,我发现这个问题与2017年4月发现的React Navigation的一个bug有关。这意味着你只能在一个堆栈中使用navigation.navigate()
。但我找不到任何有关修复此错误的信息。
5条答案
按热度按时间x3naxklr1#
你需要传递屏幕名称而不是导航器。
bprjcwpo2#
试试这个:
6yjfywim3#
我有这个问题,但我已经连接了我的应用程序。js使用堆栈导航和抽屉式导航(以及auth的切换导航)略有不同-主要遵循react导航文档:
App.js
在我想要导航的屏幕中,我像这样连接构造函数(以绑定导航函数):
第一屏幕。js
请注意我是如何调用导航的,我只是在应用程序中传递了我前面给出的路由别名。js文件:
所以我会从调用点写入
this.navigateToScreen("Activity")
,传递别名,而不是屏幕名或堆栈名。这将正确地导航到屏幕,并利用我之前在App中定义的堆栈导航。js。
希望这是有意义的(父/子层次结构是通过嵌套各种导航功能,如开关、堆栈和抽屉来实现的,以达到您想要的结果。
tvz2xvvm4#
在react-navigation版本中:5.x withNavigation不起作用。要解决此问题,请尝试此操作。
不需要在withNavigation中扭曲组件。
希望这可能有所帮助。
vom3gejh5#
在某些情况下使用导航。push()代替navigation。navigate()解决了这个问题。
有关详细说明,请转到此问题链接:https://github.com/react-navigation/react-navigation/issues/9182