Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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 使用React导航,如何基于嵌套堆栈的屏幕渲染外部堆栈标题上的“后退”按钮?_Javascript_React Native_React Navigation - Fatal编程技术网

Javascript 使用React导航,如何基于嵌套堆栈的屏幕渲染外部堆栈标题上的“后退”按钮?

Javascript 使用React导航,如何基于嵌套堆栈的屏幕渲染外部堆栈标题上的“后退”按钮?,javascript,react-native,react-navigation,Javascript,React Native,React Navigation,这里有一个小吃可以说明问题: 我将堆栈嵌套在抽屉导航器中,而抽屉导航器嵌套在堆栈导航器中 我使用外堆栈导航器显示标题栏,中间有徽标,左边有菜单按钮,这会切换菜单。我想抽屉切换按钮被替换为一个后退按钮,每当抽屉中的一个嵌套堆栈位于其堆栈的第二页或更大页上时 如何基于嵌套堆栈的屏幕渲染外部堆栈标题上的“后退”按钮 /** * Authorized Drawer * Used to set the labels in the drawer and enable drawer */ const A

这里有一个小吃可以说明问题:

我将堆栈嵌套在抽屉导航器中,而抽屉导航器嵌套在堆栈导航器中

我使用外堆栈导航器显示标题栏,中间有徽标,左边有菜单按钮,这会切换菜单。我想抽屉切换按钮被替换为一个后退按钮,每当抽屉中的一个嵌套堆栈位于其堆栈的第二页或更大页上时

如何基于嵌套堆栈的屏幕渲染外部堆栈标题上的“后退”按钮

/**
 * Authorized Drawer
 * Used to set the labels in the drawer and enable drawer
 */
const AuthorizedDrawer = createDrawerNavigator(
  {
    ScanQR: {
      screen: ScanQRScreen,
      navigationOptions: {
        drawerLabel: 'Scan'
      } 
    },
    ItemStack: { 
      screen: ItemStack,
      navigationOptions: {
        drawerLabel: 'Items'
      } 
    },
    SendStack: { 
      screen: SendStack,
      navigationOptions: {
        drawerLabel: 'Send'
      } 
    },
  },
  {
    initialRouteName: 'ItemStack'
  }
);


/**
 * Authorized Drawer Stack
 * Put the drawer inside a stack so the header can be added and styled
 */
const AuthorizedDrawerStack = createStackNavigator(
  {
    AuthorizedDrawer: { screen: AuthorizedDrawer },
  }, 
  {
    headerMode: 'float',
    navigationOptions: ({navigation}) => {
      return {
        headerLeft: (
          <View 
            style={{
              paddingLeft: 10,
            }}
          >
            <Icon 
              name={navigation.state.isDrawerOpen ? 'close' : 'menu'} 
              color="#2F6BAE"
              onPress={() => {
                navigation.toggleDrawer();
              }} 
            />
          </View>
        ),
        headerTitle: <Logo />
      };
    }
  }
)


/**
 * Root Stack
 * Contains all the stacks so you can link from links within one stack to links in the other stack
 */
const RootStack = createStackNavigator(
  {
    OnboardingStack: { screen: OnboardingStack },
    AuthorizedStack: { screen: AuthorizedDrawerStack },
  },
  {
    headerMode: 'none'
  }
);
/**
*授权出票人
*用于设置抽屉中的标签并启用抽屉
*/
const AuthorizedDrawer=createDrawerNavigator(
{
ScanQR:{
屏幕:扫描屏幕,
导航选项:{
抽屉标签:“扫描”
} 
},
ItemStack:{
屏幕:ItemStack,
导航选项:{
抽屉标签:“项目”
} 
},
发送堆栈:{
屏幕:SendStack,
导航选项:{
抽屉标签:“发送”
} 
},
},
{
initialRouteName:'ItemStack'
}
);
/**
*授权抽屉堆栈
*将抽屉放入堆栈中,以便可以添加标题并设置样式
*/
const AuthorizedDrawerStack=createStackNavigator(
{
AuthorizedDrawer:{屏幕:AuthorizedDrawer},
}, 
{
headerMode:'浮动',
导航选项:({navigation})=>{
返回{
左校长:(
{
navigation.toggleDrawer();
}} 
/>
),
标题:
};
}
}
)
/**
*根堆栈
*包含所有堆栈,因此您可以从一个堆栈中的链接链接到另一个堆栈中的链接
*/
const RootStack=createStackNavigator(
{
OnboardingStack:{屏幕:OnboardingStack},
AuthorizedStack:{屏幕:AuthorizedDrawerStack},
},
{
headerMode:“无”
}
);

您只需在
AuthorizedDrawerStack的
navigationOptions
中添加一个小条件

import { HeaderBackButton } from 'react-navigation';

let isRootScreen = (navigation) => navigation.state.routes[navigation.state.index].index === 0;

const AuthorizedDrawerStack = createStackNavigator(
    {
        AuthorizedDrawer: { screen: AuthorizedDrawer },
    },
    {
        headerMode: 'float',
        navigationOptions: ({navigation, screenProps, navigationOptions}) => {
            return {
                headerLeft: (
                    <View
                        style={{
                            paddingLeft: 10,
                        }}>
                        {isRootScreen(navigation) ?  // <-- HERE
                            <Icon
                                name={navigation.state.isDrawerOpen ? 'close' : 'menu'}
                                color="#2F6BAE"
                                onPress={() => {
                                    navigation.toggleDrawer();
                                }}
                            />
                         : <HeaderBackButton onPress={() => navigation.goBack(null)} />}
                    </View>
                ),
                headerTitle: <Logo />
            };
        }
    }
)
从“反应导航”导入{HeaderBackButton};
让isRootScreen=(导航)=>navigation.state.routes[navigation.state.index].index==0;
const AuthorizedDrawerStack=createStackNavigator(
{
AuthorizedDrawer:{屏幕:AuthorizedDrawer},
},
{
headerMode:'浮动',
导航选项:({navigation,screenProps,navigationOptions})=>{
返回{
左校长:(
{isRootScreen(导航)?//
:navigation.goBack(null)}/>}
),
标题:
};
}
}
)
这就是工作。

我所做的是用redux连接组件。。并根据redux状态处理事情