Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何强制stackNavigator以主屏幕为目标?_Javascript_React Native_Stack_React Navigation_React Navigation Drawer - Fatal编程技术网

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()??