Javascript 如何强制stackNavigator以主屏幕为目标?
我已经在我调用的第一个选项中的Javascript 如何强制stackNavigator以主屏幕为目标?,javascript,react-native,stack,react-navigation,react-navigation-drawer,Javascript,React Native,Stack,React Navigation,React Navigation Drawer,我已经在我调用的第一个选项中的DrawerNavigator中实现了StackNavigator和DrawerNavigator。问题是,当我浏览堆栈屏幕时,我想通过抽屉返回主屏幕,但这并没有发生,因为堆栈存储了用户上一个屏幕 我尝试过使用一些导航道具,但我不确定在哪里插入此代码,甚至不确定要在堆栈上使用哪个命令 MenuDrawer.js import React from 'react'; import { View, ScrollView, Text, St
DrawerNavigator
中实现了StackNavigator
和DrawerNavigator
。问题是,当我浏览堆栈屏幕时,我想通过抽屉返回主屏幕,但这并没有发生,因为堆栈存储了用户上一个屏幕
我尝试过使用一些导航道具
,但我不确定在哪里插入此代码,甚至不确定要在堆栈上使用哪个命令
MenuDrawer.js
import React from 'react';
import {
View,
ScrollView,
Text,
StyleSheet,
TouchableOpacity,
Image,
Dimensions
} from 'react-native';
export default class MenuDrawer extends React.Component{
navLink(nav, text) {
return(
<TouchableOpacity style={{height: 50}} onPress={() => this.props.navigation.navigate(nav)}>
<Text style={styles.link}>{text}</Text>
</TouchableOpacity>
)
}
render() {
return(
<ScrollView styles={styles.continer}>
<View style={styles.topImage}>
<Image style={styles.image} source={require('../images/informationappscreen/act.png')} />
</View>
<View style={styles.bottomLinks}>
{this.navLink('Principal', 'Principal')}
{this.navLink('Sobre o Aplicativo', 'Sobre o Aplicativo')}
{this.navLink('Sobre os Responsáveis', 'Sobre os Responsáveis')}
{this.navLink('Sobre o Projeto', 'Sobre o Projeto')}
{this.navLink('Política e Termos', 'Política e Termos')}
</View>
<View style={styles.footer}>
<Text style={styles.description}>ACT</Text>
<Text style={styles.version}>v1.3.0</Text>
</View>
</ScrollView>
);
}
}
从“React”导入React;
进口{
看法
滚动视图,
文本,
样式表,
可触摸不透明度,
形象,,
尺寸
}从“反应本机”;
导出默认类MenuDrawer扩展React.Component{
导航链接(导航,文本){
返回(
this.props.navigation.navigate(nav)}>
{text}
)
}
render(){
返回(
{this.navLink('Principal','Principal')}
{this.navLink('Sobre o Aplicativo','Sobre o Aplicativo'))
{this.navLink('Sobre os responseáveis','Sobre os responseáveis'))
{this.navLink('Sobre o Projeto','Sobre o Projeto')}
{this.navLink('Política e Termos','Política e Termos'))
表演
v1.3.0
);
}
}
App.js
import React from 'react';
import { View, Dimensions } from 'react-native';
import { Button, Icon } from 'native-base';
import { createAppContainer, createStackNavigator, createDrawerNavigator } from 'react-navigation';
...
const HomeNavigator = createStackNavigator ({
'Main1': {
screen: Main1,
navigationOptions: {
title: 'Menu Principal',
headerRight: (<View></View>)
}
},
'Main2': {
screen: Main2,
navigationOptions: {
title: 'Menu Principal',
headerRight: (<View></View>)
},
},
'SecondMain': {
screen: SecondMain,
navigationOptions: {
title: 'Menu Querer'
}
},
'Action1': {
screen: Action1,
navigationOptions: {
title: 'Ações'
}
},
...
}, {
defaultNavigationOptions: ({ navigation }) => {
return {
headerTitleStyle: {
fontWeight: 'bold'
},
headerLeft: (
<Button transparent onPress={() => navigation.toggleDrawer()}>
<Icon name='menu' style={{color: '#FFF'}} />
</Button>
),
headerRight: (
<HomeIcon navigation={navigation} />
),
headerStyle: {
backgroundColor: '#b80003'
},
headerTintColor: '#FFF'
}
}
});
const DrawerConfig = {
drawerWidth: Dimensions.get('window').width * 0.75,
contentComponent: ({ navigation }) => {
return(<MenuDrawer navigation={navigation} />)
}
}
const DrawerNavigator = createDrawerNavigator (
{
'Principal': {
screen: HomeNavigator
},
'Sobre o Aplicativo': {
screen: InformationApp
},
'Sobre os Responsáveis': {
screen: Team
},
'Sobre o Projeto': {
screen: Project
},
'Política e Termos': {
screen: Policy
}
},
DrawerConfig
);
const AppDrawerContainer = createAppContainer(DrawerNavigator);
export default AppDrawerContainer;
从“React”导入React;
从“react native”导入{View,Dimensions};
从“本机基”导入{按钮,图标};
从“react navigation”导入{createAppContainer、createStackNavigator、createDrawerNavigator};
...
常量HomeNavigator=createStackNavigator({
“Main1”:{
屏幕:Main1,
导航选项:{
标题:“菜单主体”,
头灯:()
}
},
“Main2”:{
屏幕:Main2,
导航选项:{
标题:“菜单主体”,
头灯:()
},
},
“第二主”{
屏幕:SecondMain,
导航选项:{
标题:“菜单查询器”
}
},
“行动1”:{
屏幕:操作1,
导航选项:{
标题:“Ações”
}
},
...
}, {
defaultNavigationOptions:({navigation})=>{
返回{
头饰样式:{
fontWeight:“粗体”
},
左校长:(
navigation.toggleDrawer()}>
),
头灯:(
),
头型:{
背景颜色:“#b80003”
},
标题颜色:“#FFF”
}
}
});
常数抽屉配置={
抽屉宽度:尺寸。获取(“窗口”)。宽度*0.75,
contentComponent:({navigation})=>{
返回()
}
}
const pawernavigator=createpawernavigator(
{
“校长”:{
屏幕:HomeNavigator
},
“Sobre o Aplicativo”:{
屏幕:InformationApp
},
“Sobre os responseáveis”:{
屏幕:团队
},
“Sobre o Projeto”:{
屏幕:项目
},
“Política e Termos”:{
屏幕:策略
}
},
付款人配置
);
const AppDroperContainer=createAppContainer(抽屉驱动程序);
导出默认AppDroperContainer;
你能试试改变导航链接的方法吗
import { StackActions, NavigationActions } from 'react-navigation';
navLink(nav, text) {
return (
<TouchableOpacity
style={{ height: 50 }}
onPress={() => {
const resetAction = StackActions.reset({
index: 0,
actions: [NavigationActions.navigate({ routeName: nav })]
});
this.props.navigation.dispatch(resetAction);
}}
>
<Text style={styles.link}>{text}</Text>
</TouchableOpacity>
);
}
从'react navigation'导入{StackActions,NavigationActions};
导航链接(导航,文本){
返回(
{
const resetAction=StackActions.reset({
索引:0,
操作:[NavigationActions.navigate({routeName:nav})]
});
这个.props.navigation.dispatch(resetAction);
}}
>
{text}
);
}
尝试使用this.props.navigation.push('your_pagename')
这会将新项目推送到堆栈中。这意味着当再次使用pushcomponentDidMount()方法调用时您是否可以共享用于抽屉的“MenuDrawer”组件的代码当实现上述代码并选择任何MenuDrawer选项时,收到以下错误消息:未捕获错误:h.NavigationActions.reset不是一个函数。(在'h.NavigationActions.reset({index:0,actions:[h.NavigationActions.navigate({routeName:t})]})中,'h.NavigationActions.reset'未定义)touchableHandlePress@[本机代码]@Alex Xavier,答案更新为链接您可以尝试StackActions.Reset有问题的解决方案有效,但作为补偿,我不得不将仅在DroperNavigator
中的屏幕复制到StackNavigator
。这是一个不错的选择,因为我可以在一个导航器中配置所有屏幕。我考虑过使用push,问题是在代码中的什么位置正确使用它?按下按钮时是否会触发navLink()??