【发布时间】:2018-11-27 16:56:18
【问题描述】:
我开始使用 react-native,我正在尝试制作一个“hello word”应用程序来看看它是如何工作的。 我在屏幕顶部制作了一个带有“标签”的菜单
在 app.js 中,我添加了 createStackNavigator 来设置我的路线 App.js
import { ... }
const AppNavigator = createStackNavigator({
Main: { screen: Main},
CScreen: {screen: FormCScreen},
});
type Props = {};
export default class App extends Component<Props> {
render() {
return (
<AppNavigator />
);
}
}
这是我的主屏幕,我在其中设置标签。
Main.js
imports {AScreen, BScreen} ...
const Tab = createMaterialTopTabNavigator(
{
A: AScreen,
B: BScreen,
},
{
tabBarPosition: 'top',
});
export default class Main extends Component {
render() {
return (
<Tab/>
);
}
}
BScreen.js
现在在我的一个 BScreen 选项卡上,我想点击一个按钮,我希望它可以加载屏幕 (CScreen)
imports ...
export default class BScreenextends Component{
render(){
return(
<View>
<TouchableHighlight onPress={() => this.props.navigation.navigate('CScreen')}>
<Text>Click here to open CScreen</Text>
</TouchableHighlight>
</View>
);
}
}
它可以正确渲染所有组件,唯一的问题是当我单击按钮显示 CScreen 时,没有任何反应。 就好像加载 Tab 我失去了我的导航器的 instacia。
Main
Tab
A
B Button (Open CScreen) ~> this is not working
如何通过选项卡内的按钮打开屏幕?
[编辑] Console.log 屏幕B
【问题讨论】:
-
reactnavigation.org/docs/en/stack-actions.html 你能从 BScreen 控制台记录 this.props.navigation 吗?我认为你需要poptotop
-
嗨,用打印的日志更新我的问题,如有必要,我可以再发送一个。为什么要使用 popToTop?当我使用标签时它会失去它的导航吗?
-
我添加了 this.props.navigation.dispatch (StackActions.popToTop ());对于我的 componentWillMount 并且没有任何改变,我继续以同样的方式无法使用 navigation.navigate
-
我相信你可以试试这个,即使你没有使用抽屉堆栈,逻辑应该是一样的
标签: javascript react-native react-router react-navigation