从嵌套堆栈导航器导航到根屏幕

2023-11-22

我是新来反应并试图自己学习它,我在将用户从嵌套堆栈导航器屏幕导航回根屏幕时遇到问题。

这是我的一些课程:-

索引.android.js :-

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  StatusBar,
  View
} from 'react-native';
import {LoginStack} from './login/loginregisterrouter';
import {StackNavigator } from 'react-navigation';
class reactNavigationSample extends Component {
  render(){
    return (
   <LoginStack/>
    );
  }
}
AppRegistry.registerComponent('MssReactDemo', () => reactNavigationSample);

登录注册路由器 :-

import React from 'react';
import {StackNavigator } from 'react-navigation';
import LoginScreen from './LoginScreen';
import RegisterScreen from './RegisterScreen';
import NavigationContainer from './navigationContainer';
export const LoginStack = StackNavigator({
  LoginScreen: {
    screen: LoginScreen,
    navigationOptions: {
      title: 'LoginScreen',
    }
  },
  RegisterScreen: {
    screen: RegisterScreen,
    navigationOptions: ({ navigation }) => ({
      title: 'RegisterScreen',
    }),
  },NavigationContainer: {
        screen: NavigationContainer,
        navigationOptions: ({ navigation }) => ({
          title: 'NavigationContainer', header: null,
        }),
      },
});

导航容器.js :-

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  StatusBar,
  View
} from 'react-native';
import {EasyRNRoute,} from '../parent';
import {StackNavigator } from 'react-navigation';
export default class NavigationContainer extends Component {
  render(){
    return (
   <EasyRNRoute/>
    );
  }
}

父级.js :-

import React, { Component } from 'react';
import {
  StyleSheet,
  Text,
  StatusBar,
  View
} from 'react-native';
import App from './app';
import DrawerMenu from './Drawer/drawer-toolbar-android';
import BookmarkView from './Pages/bookmark';
import ClientView from './Pages/client';
import InfoView from './Pages/info';
import SettingsView from './Pages/setting';
import { DrawerNavigator, StackNavigator } from 'react-navigation';

export const stackNavigator = StackNavigator({
  Info: { screen: InfoView },
  Settings: {screen: SettingsView },
  Bookmark: {screen: BookmarkView },
  Connections: {screen: ClientView},
}, {
  headerMode: 'none'
});

export const EasyRNRoute = DrawerNavigator({
  Home: {
    screen: App,
  },
  Stack: {
    screen: stackNavigator
  }
}, {
  contentComponent: DrawerMenu,
  contentOptions: {
    activeTintColor: '#e91e63',
    style: {
      flex: 1,
      paddingTop: 15,
    }
  }
});

抽屉工具栏-android.js :-

import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    StatusBar,
    View
} from 'react-native';
import { NavigationActions } from 'react-navigation'
import { COLOR, ThemeProvider, Toolbar, Drawer, Avatar } from 'react-native-material-ui';
import Container from '../Container';
import LoginScreen from '../login/LoginScreen';

const uiTheme = {
    palette: {
        primaryColor: COLOR.green500,
        accentColor: COLOR.pink500,
      },
    toolbar: {
        container: {
            height: 70,
            paddingTop: 20,
          },
      },
      avatar: {
          container: {
              backgroundColor: '#333'
          }
      }
  };

export default class DrawerMenu extends Component {
  constructor(props, context) {
    super(props, context);
    this.state = {
        active: 'people',
      };
  }
handleLogoutPress = () => {
//    AsyncStorage.setItem('SignedUpuser', '');
this.props
               .navigation
               .dispatch(NavigationActions.reset(
                 {
                    index: 0,
                    actions: [
                      NavigationActions.navigate({ routeName: 'LoginScreen'})
                    ]
                  }));
//     this.props.navigation.dispatch(NavigationActions.back());
  };
  _setInfoActive() {
    this.setState({ active: 'info' });
  }

  render() {
    return (
        <ThemeProvider uiTheme={uiTheme}>
                <Container>
                    <StatusBar backgroundColor="rgba(0, 0, 0, 0.2)" translucent />
                    <Toolbar
                    leftElement="arrow-back"
                    onLeftElementPress={() => this.props.navigation.navigate('DrawerClose')}
                    centerElement="Menu"
                />
                    <View style={styles.container}>
                        <Drawer>
                            <Drawer.Header >
                                <Drawer.Header.Account
                                style={{ 
                                    container: { backgroundColor: '#fafafa' },
                                }}
                                avatar={<Avatar text={'S'} />}
//                                accounts={[
//                                    { avatar: <Avatar text="H" /> },
//                                    { avatar: <Avatar text="L" /> },
//                                ]}
                                footer={{
                                    dense: true,
                                    centerElement: {
                                        primaryText: 'Siddharth',
                                        secondaryText: 'I am DONE now',
                                    },

                                  }}
                            />
                            </Drawer.Header>
                            <Drawer.Section
                            style={{
                                label: {color: '#0000ff'}
                            }}
                            divider
                            items={[
                                {
                                    icon: 'bookmark-border', value: 'Bookmarks',
                                    active: this.state.active == 'bookmark',
                                    onPress: () => {
                                        this.setState({ active: 'bookmark' });
                                        this.props.navigation.navigate('Bookmark');
                                      },
                                  },
                                {
                                    icon: 'people', value: 'Connections',
                                    active: this.state.active == 'Connection',
                                    onPress: () => {
                                        this.setState({ active: 'Connection' });
                                        this.props.navigation.navigate('Connections');
                                      },
                                  },
                            ]}
                        />
                            <Drawer.Section
                            title="Personal"
                            items={[
                                {
                                    icon: 'info', value: 'Info',
                                    active: this.state.active == 'info',
                                    onPress: () => {
                                        this.setState({ active: 'info' });
                                        //this.props.navigation.navigate('DrawerClose');
                                        this.props.navigation.navigate('Info');
                                      },
                                  },
                                {
                                    icon: 'settings', value: 'Settings',
                                    active: this.state.active == 'settings',
                                    onPress: () => {
                                        this.setState({ active: 'settings' });
                                        this.props.navigation.navigate('Settings');
                                      },
                                  },
                                   {
                                    icon: 'logout', value: 'Logout',
                                    active: this.state.active == 'logout',
                                    onPress: () => {
                                    this.handleLogoutPress();
                                     },
                                      },
                            ]}
                        />
                        </Drawer>
                    </View>
                </Container>
            </ThemeProvider>
    );
  }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: '#F5FCFF',
      },
    header: {
        backgroundColor: '#455A64',
      },
    welcome: {
        fontSize: 20,
        textAlign: 'center',
        margin: 10,
      },
    instructions: {
        textAlign: 'center',
        color: '#333333',
        marginBottom: 5,
      },
  });

上面是我在应用程序中使用的堆栈架构,正如您所看到的,我的主屏幕是登录屏幕,并且我确实可以在抽屉(侧面菜单)中选择从应用程序注销。我真正想要的是,当用户单击注销时,他/她应该被重定向到登录屏幕。我已经用谷歌搜索了这个并了解了两种方法,但这两种方法都不适合我,可能是我以错误的方式使用它们。所以我来这里寻求你的帮助。

这两种方法是 :-

1)

this.props
               .navigation
               .dispatch(NavigationActions.reset(
                 {
                    index: 0,
                    actions: [
                      NavigationActions.navigate({ routeName: 'LoginScreen'})
                    ]
                  }));

2) this.props.navigation.dispatch(NavigationActions.back());

这个问题对你来说可能看起来很愚蠢,但我真的被困在这一点上,只是想知道我怎样才能解决这个问题。任何帮助将不胜感激! 提前致谢。


在尝试了几乎所有方法之后,我找到了对我有用的解决方案:

  this.props.navigation.popToTop(); // go to the top of the stack
  this.props.navigation.goBack(null); // now show the root screen
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从嵌套堆栈导航器导航到根屏幕 的相关文章

随机推荐

  • Rails 中列名的别名

    在我的数据库中有 删除 或 监听控制 等列名 这些无法更改 因此我想为这些名称起别名以避免我的应用程序出现问题 I found 下面的代码但它已经过时了 2005 年 8 月 5 日 并且不适用于 Rails 3 module Legacy
  • 奇数时选择最后一个子项,偶数时选择最后 2 个子项

    我所处的情况是显示的元素数量是可变的 我需要一个奇怪的解决方案 但我无法实现 我什至怀疑它是否只能通过 css 来实现 如果元素数量是奇数 我需要选择最后一个子元素 如果元素数量是偶数 我需要选择最后 2 个子元素 我一直在尝试nth la
  • Yq:检索对象键名称

    我有一个 YAML 文件 在我的例子中是 docker compose 文件 如下所示 networks foo some opts covfefe bar some opts such wow services apache image
  • 空 HTML href 会导致 IE 中列出目录

    我有一个带有单独 HTML 文件的网站 实际上是 shtml 但这对于这个问题来说并不重要 这些 shtml 文件包含一张图片以及一个前进和后退按钮 因此我可以切换回预览 shtml 文件或浏览到下一个文件 就像在画廊中一样 所有这些 sh
  • 私有字段的 Scala 名称修改和 JavaFX FXML 注入

    下面的例子和解释很长 所以这是我的问题的要点 当使用坚持执行字段注入 在真正应该保持私有的字段上 的框架时 如何处理scalac对私有字段的名称修改 我正在 Scala 中使用 ScalaFX JavaFX 和 FXML 编写一个应用程序
  • Bootstrap 4 导航栏垂直显示而不是水平显示

    我已经按照教程中的方式构建了一个导航栏 但不知何故 我的导航栏在应该水平显示时却垂直显示 关于如何解决这个问题有什么想法吗 提前致谢
  • CakePHP SwiftMailer SMTP TLS OpenSSL 错误 SSL3_GET_RECORD:版本号错误

    我正在尝试使用我在这里找到的 CakePHP SwiftMailer 组件发送电子邮件 http bakery cakephp org articles sky l3ppard 2009 11 07 updated swiftmailer
  • MongoDB 自定义序列化器实现

    我是 MongoDB 新手 正在尝试让 C 驱动程序序列化 F 类 我让它使用可变 F 字段和无参数构造函数与类自动映射器一起工作 但实际上我需要保留不变性 因此我开始考虑实现 IBsonSerializer 来执行自定义序列化 我还没有找
  • 通过 Jenkins API 获取子项目构建

    我配置了一个 Jenkins 项目 我在这里称之为 SuperJob 来简单地按顺序调用几个不同的其他 jenkins 项目 我希望能够通过 Jenkins API 找出该 SuperJob 特定构建号的所有子项目的结果 查看发布的代码HE
  • Vim:突出显示 incsearch 中的所有匹配项

    我正在使用incsearch and hlsearch选项 按 Enter 键后 所有匹配项都会突出显示 但只有我键入时的第一个匹配项 我想在输入时突出显示所有匹配项 我怎样才能得到这种行为 您可以使用incsearch vim 插件 In
  • 修改 Pods 文件后 Cocoa pod 出现问题

    当我更改 Pods 文件时 在命令 pod install 后收到此错误 Users mac Documents Projects Test Podfile 1 syntax error unexpected tINTEGER expect
  • 将日期从 JSON 反序列化为 Typescript 中的日期

    我从后端得到一个如下所示的 JSON schedulingId 7d98a02b e14f 43e4 a8c9 6763ba6a5e76 schedulingDateTime 2019 12 28T14 00 00 registration
  • 提交表单后如何使用 WWW::Mechanize 下载文件?

    我有代码 usr bin perl use strict use WWW Mechanize my url http divxsubtitles net page subtitleinformation php ID 111292 my m
  • Powershell ConvertFrom-Json 编码特殊字符问题

    我的 powershell 脚本中有这段代码 但它在特殊字符部分表现不佳 request http 151 80 109 18 8082 vrageremote v1 session players a Invoke WebRequest
  • D3.js - 如何在此可折叠树中的文本中添加新行?

    我有一棵由 D3 构建的可折叠树 这是 JSFIDDLE http jsfiddle net mEyQW 57 正如您所看到的 当节点完全展开时 文本全部重叠 我想添加新行来替换空格 可能有 1 或 2 个 例如 SDS 123 将变为 S
  • AutoHotKey:从另一个脚本调用一个脚本

    我刚刚发现了 AutoHotKey 这似乎是梦想成真 我有两个 ahk 脚本 A ahk and B ahk 我想从脚本 A 中调用脚本 B 奇怪的是 AHK 论坛在这个问题上保持沉默 但我确信这是可能的 这就是您正在寻找的 Include
  • 使用 App Engine 本地计算机上的自定义数据存储位置

    我正在 Android Studio 中开发 App Engine 应用程序 并在本地计算机 使用本地数据存储 上测试它 它是基于 Java 的应用程序 每次我重新运行服务器时 本地数据存储都会被清除 我找到了几种解决方案Python开发人
  • 启动 PendingIntent 获取结果

    我实施Activity X 我有一个PendingIntent P from a Service S 我确信 P 指向unknown Activity Y它通过其返回结果 RsetResult method 我应该如何在X中启动P 以便在中
  • 如何在没有 url 方案或外部服务器的情况下在 2 个本地 ios 应用程序之间共享文件?

    我有 2 个本地应用程序 A 和 B 我希望应用程序 A 调用应用程序 B 并且 B 使用文件向 A 发送响应 Url 方案对于调用应用程序 B 来说是一个很好的解决方案 但对于将文件发送到 A 来说却是一个糟糕的解决方案 如何在没有 ur
  • 从嵌套堆栈导航器导航到根屏幕

    我是新来反应并试图自己学习它 我在将用户从嵌套堆栈导航器屏幕导航回根屏幕时遇到问题 这是我的一些课程 索引 android js import React Component from react import AppRegistry St