【问题标题】:can't find variable navigation in other component in react-native在 react-native 的其他组件中找不到变量导航
【发布时间】:2020-07-05 13:54:30
【问题描述】:

这是我的 App.js

import React from "react";

import Menu from "./components/Menu";

import HomeScreen from "./views/HomeScreen";
import SecondScreen from "./views/SecondScreen";

import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack";
const Stack = createStackNavigator();

export default function App() {
  return (
    <Container>
        <NavigationContainer>
          <Stack.Navigator>
            <Stack.Screen
              name="Home"
              component={HomeScreen}
            />
            <Stack.Screen name="Second" component={SecondSCreen} />
          </Stack.Navigator>
        </NavigationContainer>
      <Menu></Menu>
    </Container>
  );
}

它可以工作,因为它默认显示 HomeScreen,但我想通过 Menu-组件导航到第二个屏幕:

import React from "react";
import { View, Text, TouchableOpacity } from "react-native";

class Menu extends React.Component {
  render() {
    return (
      <View>
        <TouchableOpacity
          onPress={() => {
            alert("Hi");
          }}
        >
          <Text>HomeScreen</Text>
        </TouchableOpacity>

        <TouchableOpacity
          onPress={() => {
            navigation.navigate("Second");
          }}
        >
          <Text>Screen 2</Text>
        </TouchableOpacity>
      </View>
    );
  }
}

export default Menu;

该组件是可见的,但是当我单击第二个按钮时,我希望 SecondScreen 处于打开状态。 但我得到这个错误:

找不到变量:导航

我错过了什么?

【问题讨论】:

  • 您正在尝试访问导航之外的导航检查此答案stackoverflow.com/a/62700646/1435722
  • @GuruparanGiritharan 但是我如何(重新)使用它来使我的Menu.js 工作?
  • 检查我的答案

标签: react-native expo


【解决方案1】:

对于这种情况,您应该使用navigationRef,因为您的菜单位于导航容器之外

import { NavigationContainer } from '@react-navigation/native';
import { navigationRef } from './RootNavigation';

  export default function App() {
  return (
    <Container>
        <NavigationContainer ref={navigationRef}>
          <Stack.Navigator>
            <Stack.Screen
              name="Home"
              component={HomeScreen}
            />
            <Stack.Screen name="Second" component={SecondSCreen} />
          </Stack.Navigator>
        </NavigationContainer>
      <Menu></Menu>
    </Container>
  );
}

// RootNavigation.js

import * as React from 'react';

export const navigationRef = React.createRef();

export function navigate(name, params) {
  navigationRef.current?.navigate(name, params);
}

在菜单js中,

从 'RootNavigation' 导入 {navigate};

class Menu extends React.Component {
  render() {
    return (
      <View>
        <TouchableOpacity
          onPress={() => {
            alert("Hi");
          }}
        >
          <Text>HomeScreen</Text>
        </TouchableOpacity>

        <TouchableOpacity
          onPress={() => {
            navigate("Second");
          }}
        >
          <Text>Screen 2</Text>
        </TouchableOpacity>
      </View>
    );
  }
}

【讨论】:

  • 非常感谢!我可以扩展它来获取路由参数吗?现在我这样做:navigate("Sheep", { slug: card.slug });,但我无法访问 slug 参数
  • 它应该在'Sheep'屏幕的 route.params.slug 中可用,就像普通的路线道具一样
猜你喜欢
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2019-05-27
  • 2021-05-31
  • 1970-01-01
  • 2021-01-28
  • 2018-05-28
  • 1970-01-01
相关资源
最近更新 更多