【问题标题】:Navigation using 'react-native-navigation'使用“react-native-navigation”进行导航
【发布时间】:2019-01-09 14:11:31
【问题描述】:

我使用“react-native-navigation”创建了应用程序,并且第一个导航工作正常。

 Navigation.startSingleScreenApp({
      screen: {
          screen: 'drawer.HomeScreen',
          title: '',
          navigatorStyle: {
              navBarHidden: true
          }
      }
  });

导航有问题

import { Navigation } from 'react-native-navigation';

并尝试使用导航

Navigation.push({
      component: {
          name: 'drawer.DashboardScreen'
      }
});

startMainTab.js

 const startTabs = () => {
      Promise.all([
          Icon.getImageSource("ios-share-alt", 30),
          Icon.getImageSource("ios-menu", 30)
      ]).then(sources => {
          Navigation.startTabBasedApp({
              tabs: [{
                      screen: 'drawer.AnalyticsScreen',
                      navigatorButtons: {
                          leftButtons: [{
                              icon: sources[1],
                              title: "Menu",
                              id: 'sideDrawerToggle'
                          }]
                      }
                  },
                  {
                      screen: 'drawer.DashboardScreen',
                      navigatorButtons: {
                          leftButtons: [{
                              icon: sources[1],
                              title: "Menu",
                              id: 'sideDrawerToggle'
                          }]
                      }
                  }
              ],
              drawer: {
                  left: {
                      screen: 'drawer.SideDrawer'
                  }
              }
          });
      });
  }

SideDrawer.js

  export default startTabs;

      export default class SideDrawer extends Component {

      constructor(props) {
          super(props);
          this.props.navigator.setOnNavigatorEvent(this.onNavigatorEvent);
      }

      componentWillMount() {
          this.props.navigator.setOnNavigatorEvent(this.onNavigationEvent)
      }

  onNavigationEvent = (event) => {
          // handle a deep link
          if (event.type == 'DeepLink') {
              const parts = event.link;
              alert("Scree: " + parts)
              //this.navigateToAbout()                  

              this.props.navigator.push({
                  screen: "drawer.HomeScreen"
              })
              if (parts == 'drawer.DashboardScreen') {
                  //this.onPressScreen1();
              }
          }
      }

      navigateToAbout = () => {
          this.props.navigator.push({
              screen: 'drawer.DashboardScreen'
          })

      }
      render() {
          return ( <
              View style = {
                  styles.container
              } >
              <
              Text > SideDrawer < /Text> <
              TouchableHighlight onPress = {
                  this.navigateToAbout.bind(this)
              } >
              <
              Text > Click Me < /Text> <
              /TouchableHighlight> <
              /View>
          )
      }
  }

【问题讨论】:

    标签: react-native react-redux react-router


    【解决方案1】:

    由于推送屏幕是您在现有导航堆栈上执行的操作,因此您需要在当前组件导航器对象上调用它,您会自动将其作为道具获取: this.props.navigator.push({screen: 'drawer.DashboardScreen'})

    我强烈建议您迁移到 react-native-navigation v2,因为 v1 功能有限且不再维护。

    【讨论】:

    • @Ved 你在哪里打电话给this.props.navigator.push?你收到错误消息了吗?
    • @Ved 尝试将title 属性添加到屏幕,并确保您已通过Navigation.registerComponent() 注册它。检查这个例子here
    【解决方案2】:

    从这里下载源代码(React Native Navigation)

    App.js:

    import React, {Component} from 'react';
    import {createStackNavigator,createAppContainer} from 'react-navigation'
    import HomeScreen from './Screens/HomeScreen';
    import ProfileScreen from './Screens/ProfileScreen';
    import ContactScreen from './Screens/ContactScreen';
    import MainScreen from './Screens/MainScreen'
    
    
    export default class App extends Component {
    render() {
    
    return <AppNavigationContainer/>
    
    }
    
    }
    const AppNavigator = createStackNavigator({
    
    Main:MainScreen,
    
    Home: HomeScreen,
    
    Profile: ProfileScreen,
    
    Contact:ContactScreen
    
    }, {
    
    initialRouteName: 'Main',
    
    navigationOptions: {
    
    headerTitleStyle: {
    
    fontWeight: "bold",
    
    color: "red",
    
    },
    
    headerTintColor: "red"
    
    }
    
    })
    
    const AppNavigationContainer = createAppContainer(AppNavigator);
    

    从一个屏幕移动到另一个屏幕:

    this.props.navigation.navigate('Profile')
    

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      • 2018-02-24
      相关资源
      最近更新 更多