我开始有点反应原生,我试图做一个"你好的话"应用程序,看它是如何工作的。 我用" tab"做了一个菜单。在我的屏幕顶部
在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 ScreenB
答案 0 :(得分:5)
我认为您正在尝试实现StacksOverTabs模式的导航设置,
您犯的错误是Main
屏幕是一个普通的组件,在其中您已呈现了Tab组件,即createMaterialTopTabNavigator。因此,Tab组件将无法从StackNavigator获得正确的导航道具
相反,您必须使Main
屏幕本身成为createMaterialTopTabNavigator。
例如,
const AppNavigator = createStackNavigator({
Main: { screen: MainTab}, // MainTab is itself a TabNavigator now
CScreen: {screen: FormCScreen},
});
const MainTab = createMaterialTopTabNavigator(
{
A: AScreen,
B: BScreen,
},
{
tabBarPosition: 'top',
});
);
查看GitHub中的官方示例代码,在其中导航到StacksOverTabs
https://github.com/react-navigation/react-navigation/tree/master/examples/NavigationPlayground/js
谢谢。
答案 1 :(得分:1)
我相信您也可以将其放在App类的顶部:
'user-services-http-two 32370'