反应导航-带有嵌套导航器的导航选项

时间:2019-03-07 04:31:13

标签: javascript reactjs react-native react-navigation

我还在学习React Native。我有点知道React Navigation是如何工作的。现在,我对导航嵌套有些困惑。我会尽量快点。

首先,嵌套导航器的实际方法是什么?

我在某种程度上使用嵌套来做,但是遇到了一个问题。我只能在嵌套导航器中更改导航选项,而不能在组件屏幕中更改导航选项。自从Im使用自定义页眉以及嵌套导航器以来,我很难从其中一个屏幕打开抽屉菜单。我有一个类似的代码用于测试:

App.js(导航器)

import React, { Component } from 'react';
import { createStackNavigator, createDrawerNavigator, createBottomTabNavigator, createAppContainer } from 'react-navigation';
import SplashScreen from './SplashScreen';
import MainScreen from './MainScreen';
import FirstTabScreen from './FirstTabScreen';
import SecondTabScreen from './SecondTabScreen';

const AppStackNavigator = createStackNavigator({
    splash: {
        screen: SplashScreen
    },
    mainFlow: {
        screen: createDrawerNavigator({
            main: {
                screen: MainScreen
            },
            someTab: {
                screen: createBottomTabNavigator({
                    firstTab: {
                        screen: FirstTabScreen
                    },
                    secondTab: {
                        screen: SecondTabScreen
                    }
                })
            }
        })
    }
});

const AppContainer = createAppContainer(AppStackNavigator);


export default class App extends Component{

    render(){
        return <AppContainer/>;
    }
}

上面的代码将启动SplashScreen,它很好,并且具有以下内容:

SplashScreen.js

import React, { Component } from 'react';
import { Button, View } from 'react-native';

export default class SplashScreen extends Component {

    static navigationOptions = {
        header: null
    }

    go = () =>{
        this.props.navigation.navigate('main');
    }

    render() {
        return (
            <View>
                <Button title='GO NEXT SCREEN' onPress={this.go}/>
            </View>
        );
    }
}

在此屏幕上,导航选项以相同的代码及其预期的方式工作。现在,当我按下按钮并转到下一个屏幕即MainScreen时,一切都变得很酷:

MainScreen.js

import React, { Component } from 'react';
import { Text, StyleSheet, Button, View } from 'react-native';

export default class MainScreen extends Component {

    static navigationOptions = {
        header: null
    }

    drawer = () => {
        this.props.navigation.openDrawer();
    }

    render() {
        return (
            <View>
                <Text style={styles.baseText}>HELLO</Text>
                <Button title='DRAWER' onPress={this.drawer}/>
            </View>
        );
    }
}

const styles = StyleSheet.create({
    baseText: {
        fontFamily: 'Cochin',
    },
    titleText: {
        fontSize: 20,
        fontWeight: 'bold',
    },
});

这是问题所在,导航选项在这里不起作用,因此我尝试在导航器本身中设置这些行,并且如果我将标头配置为null则可以工作,但是如果我想控制“ props.navigation”,它将说“ this .props.navigation'未定义。

因此,理想的问题是,是否可以通过屏幕组件本身提供导航选项?不知何故?还是有一种方法可以将这些导航选项与不会显示其未定义状态的有效导航道具一起放入导航器中?

所有这些是因为我要自定义标题

非常感谢!

2 个答案:

答案 0 :(得分:3)

您需要使用withNavigation在此处提供导航道具,

查看我的答案here

答案 1 :(得分:1)

SplashScreen.js中,您没有导航到右侧屏幕

您必须

go = () =>{
        this.props.navigation.navigate('mainFlow');
    }