【问题标题】:ReactNative Navigation to other screen from a button click, while other route is not defined in Tabbed navigation通过单击按钮将本机导航反应到其他屏幕,而其他路线未在选项卡式导航中定义
【发布时间】:2018-01-25 15:00:07
【问题描述】:

我正在使用react-navigation 模块并定义了以下屏幕路由:

import React, {Component} from 'react';
import { AppRegistry } from 'react-native';
import { TabNavigator } from 'react-navigation';

import HomeScreen from './src/ScreenDashboard';
import TodosScreen from './src/ScreenTodos';
import ContactsScreen from './src/ScreenContacts';

                            // Defining navigation (using tabbed navigation style)
const AppWithNavigation = TabNavigator(    
{                                         
    Home: { screen: HomeScreen },
    Todos: { screen: TodosScreen },
    Contacts: { screen: ContactsScreen }
},
{
 ...
}

如果我尝试将过渡添加到任何其他屏幕,我必须通过以下方式进行:

const { navigate } = this.props.navigation;   // child component reading navigation from its props
<Button onPress={ () => navigate('Todos') } />

但问题是,我不想转换到我的 Todos 组件屏幕,我有另一个组件 Appointments,我想转换到那个组件。我怎样才能做到这一点?好像我在TabNavigator() 中包含了它的路线,这将开始在我的导航中显示其他选项卡(我不想显示)。

当我想在点击添加、编辑、搜索按钮时进行屏幕导航时,同样的逻辑适用。这些不能在导航路线中定义(以便使它们在主导航中可见)。我希望你能理解我的问题。

在 web ReactJS 中我们只是简单地定义了路由,这很不错,但是这里不知道如何管理这些东西。

基本上,当我单击主屏幕上的任何条带时,我想切换屏幕。

【问题讨论】:

标签: reactjs react-native react-router react-navigation


【解决方案1】:

您可以将导航器嵌套在其他导航器中。在您的情况下,您可以在 TabNaivgator 中插入 StackNavigator

const TodoNavigator = StackNavigator({
    Todos: { screen: TodosScreen },
    Appointments: { screen: AppointmentsScreen},
    // other screens
})

const AppWithNavigation = TabNavigator(    
{                                         
    Home: { screen: HomeScreen },
    TodosTab: TodoNavigator,
    Contacts: { screen: ContactsScreen }
}

现在,当您按下 Todo 选项卡时,它将打开您的 todo 屏幕,因为默认情况下会加载第一个屏幕。要导航到 AppointmentsScreen,您需要调用 this.props.navigation.navigate('Appointments'),它将转换到该屏幕。你仍然会在 Todos 选项卡中(它将处于活动状态)。如果您愿意,可以隐藏选项卡并做很多不同的事情,请查看文档。

您可以了解更多关于嵌套导航器here

【讨论】:

  • 我已经更新了我的问题。当我不想进行堆栈导航时,我不明白为什么需要添加StackNavigator(如果我的理解有误,请纠正我)。我只想触发导航,这样当我单击主屏幕上的任何条带/卡片,或单击添加或编辑按钮(在我的内部任何屏幕中可用)时,它会触发我的屏幕导航并呈现相关的组件/视图。
  • 据我了解,StackNavigation 是一个可见的堆叠选项列表,用户可以点击它在屏幕之间导航。我不知道这将如何适应我们通常的屏幕布局和按钮。
  • 添加按钮位于我们屏幕设计布局中的某个位置,而编辑或搜索按钮位于我们屏幕布局中的其他位置(一般而言)。所以,在我看来,StackNavigation 是从哪里来的。不知道我对 ReactNative 导航系统的理解是否正确。
  • 所以,如果我理解正确,当您按下某些按钮/卡片(添加、编辑等)时,您希望将用户导航到全新的屏幕(显示不同的屏幕)。为了在屏幕之间导航,您需要一个导航器,它们的基本功能是 StackNavigator。看来,您对 StackNavigator 的理解类似于 TabsNavigator,其中按钮将显示在屏幕的某个部分,一个在另一个之上。不是这种情况。 StachNavigator 不会在任何地方显示任何按钮,它类似于您在 react 中的路线
  • StackNavigator 中的 Stack 指的是导航的处理方式,每次进入新屏幕时,它都会“堆积”在前一个屏幕的顶部,而不是设备上按钮的视觉位置跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 2020-12-28
相关资源
最近更新 更多