【问题标题】:How to navigate to other pages with header buttons in React Navigation?如何在 React Navigation 中使用标题按钮导航到其他页面?
【发布时间】:2020-10-04 21:48:10
【问题描述】:

如何使用标题上的按钮在屏幕之间导航?当我尝试使用标题按钮返回或导航到其他页面时,我得到了同样的错误。 屏幕上的按钮效果很好。

"未定义不是一个对象(评估'navigation.navigate') (设备)”

“未定义不是一个对象(评估'navigation.goBack')”

import 'react-native-gesture-handler';
import  React from 'react';
import { Text, View, StyleSheet, Button } from 'react-native';
import Constants from 'expo-constants';

import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';

const Stack = createStackNavigator();

//Screen 1
function HomeScreen({ navigation }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Home Screen</Text>
      <Button
        title="Details"
        onPress={() => navigation.navigate('Details')}
      />
    </View>
  );
}

//Screen 2
function DetailsScreen({ navigation }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Details</Text>
      <Button title="back home" onPress={() => navigation.goBack()} />
    </View>
  );
}

export default function App({ navigation, route }) {
  return (
    <NavigationContainer>
      <Stack.Navigator initialRout="Home">
        <Stack.Screen name="Home" component={HomeScreen} />


        <Stack.Screen
          name="Details"
          component={DetailsScreen}
          options={{
            headerTitle: () => <Text>Register</Text>,
            headerRight: () => <Button title="Test" onPress={() => navigation.navigate('Home')} />,
            headerLeft: () => <Button title="back home" onPress={() => navigation.goBack()} />,
          }}
        />


      </Stack.Navigator>
    </NavigationContainer>
  );
}

https://snack.expo.io/@camileppst/navigation-test

【问题讨论】:

    标签: react-native react-navigation


    【解决方案1】:

    您需要注入导航道具,而不是从 App 组件的道具中获取:

    export default function App() {
      return (
        <NavigationContainer>
          <Stack.Navigator initialRout="Home">
            <Stack.Screen name="Home" component={HomeScreen} />
            <Stack.Screen
              name="Details"
              component={DetailsScreen}
              options={({navigation}) => ({
                headerTitle: () => <Text>Register</Text>,
                headerRight: () => <Button title="Test" onPress={() => navigation.navigate('Home')} />,
                headerLeft: () => <Button title="back home" onPress={() => navigation.goBack()} />,
              })}
            />
          </Stack.Navigator>
        </NavigationContainer>
      );
    }
    

    【讨论】:

    • 如何通过我从上一页传递到页面详细信息的参数禁用这样的按钮?换句话说,我想通过从上一页传递的导航参数来控制标题按钮。
    • 您可以尝试在组件中使用setOptions with。 reactnavigation.org/docs/headers/…
    猜你喜欢
    • 2014-01-14
    • 2020-11-10
    • 2019-11-21
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 2021-01-29
    • 2019-06-20
    相关资源
    最近更新 更多