【问题标题】:Navigation between 2 screens in react native in navigationOptions在navigationOptions中反应原生的2个屏幕之间的导航
【发布时间】:2020-03-26 14:23:57
【问题描述】:

我尝试创建一个名为 Navigate.js 的特殊导航屏幕。这是我写的:

/**

 * Navigate.js

 *

 * Root component of the app, 

 * responsible for setting up routes.

 *

*/



// Libs

import React from 'react';

import { View, Text, Button } from 'react-native';
import { createAppContainer } from 'react-navigation';

import { createStackNavigator } from 'react-navigation-stack';



// Components

import OfferScreen from './screens/OffersScreen';

import Post from './screens/Post';



/**

 * createStackNavigator

 *

 * Creates a stack of our routes.

 *

*/

const Navigator = createStackNavigator({

    OfferScreen: { screen: OfferScreen },

    Post: { screen: Post },

});



/**

 * createAppContainer

 *

 * Responsible for managing app state and linking

 * the top-level navigator to the app environment.

 *

*/

const Nav = createAppContainer(Navigator); 导出默认导航;

在 OfferScreen 我有这个代码:

static navigationOptions =({}) =>({
    title: "Oferte",
    headerTitleStyle: { alignSelf: 'center', },
    headerStyle: {
      backgroundColor: '#BA272A',
    },
    headerRight: (

     <View style={{paddingRight:11}}>
       <Button
        color="#ff5c5c" title="Tombola"
        onPress={() =>
          this.props.navigation( 'Post' )}

       />
    </View> 
    ),
    headerTintColor: 'white',
    headerTitleStyle: {
      fontWeight: 'bold',
    },
  })

错误说明:未定义不是对象(评估“OfferScreen.props.navigation”) 请帮我解决这个错误。我正在为导航而苦苦挣扎:(

【问题讨论】:

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


    【解决方案1】:

    您将导航对象交付给navigationOptions。 并使用navigation.pushnavigation.navigate 移动屏幕。

    每次调用 push 时,我们都会向 navigation 堆栈添加一条新路由。 当您致电navigate 时,它首先会尝试查找现有路线 那个名字,并且只有在还没有路由的情况下才会推送新路由 堆栈。

    static navigationOptions = ({ navigation }) => {
        title: "Oferte",
        headerTitleStyle: { alignSelf: 'center', },
        headerStyle: {
          backgroundColor: '#BA272A',
        },
        headerRight: (
    
         <View style={{paddingRight:11}}>
           <Button
            color="#ff5c5c" title="Tombola"
            onPress={() =>
              navigation.push( 'Post' )}
    
           />
        </View> 
        ),
        headerTintColor: 'white',
        headerTitleStyle: {
          fontWeight: 'bold',
        },
      })
    

    示例

    import React from 'react';
    import { Button, View, Text } from 'react-native';
    import { createStackNavigator, createAppContainer } from 'react-navigation'; // Version can be specified in package.json
    
    class HomeScreen extends React.Component {
    
      static navigationOptions =({navigation}) =>({
        title: "Oferte",
        headerTitleStyle: { alignSelf: 'center', },
        headerStyle: {
          backgroundColor: '#BA272A',
        },
        headerRight: (
    
         <View style={{paddingRight:11}}>
           <Button
            color="#ff5c5c" title="Tombola"
            onPress={() =>
              navigation.push( 'Details' )}
    
           />
        </View> 
        ),
        headerTintColor: 'white',
      })
    
      render() {
        return (
          <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
            <Text>Home Screen</Text>
            <Button
              title="Go to Details"
              onPress={() => this.props.navigation.navigate('Details')}
            />
          </View>
        );
      }
    }
    
    class DetailsScreen extends React.Component {
      render() {
        return (
          <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
            <Text>Details Screen</Text>
          </View>
        );
      }
    }
    
    const RootStack = createStackNavigator(
      {
        Home: HomeScreen,
        Details: DetailsScreen,
      },
      {
        initialRouteName: 'Home',
      }
    );
    
    const AppContainer = createAppContainer(RootStack);
    
    export default class App extends React.Component {
      render() {
        return <AppContainer />;
      }
    }
    
    

    【讨论】:

    • 还是不行。我试过推。这次没有错误。但是按钮没有做任何事情。
    • @AdelinBojan 我为你做了一个例子。看我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多