首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从navigation.navigate外部的组件中使用stack.navigation

如何从navigation.navigate外部的组件中使用stack.navigation
EN

Stack Overflow用户
提问于 2020-04-12 10:37:22
回答 6查看 31.5K关注 0票数 21

我有一个应用程序使用React本机,在这里我使用了react导航(5.2.9)。

我构建了一个Stack.Navigator,在这里我有我的屏幕,但我希望页脚组件在外面,以便它在所有屏幕呈现。问题是,我无法从页脚导航,这是我需要做的,因为页脚有几个应该更改屏幕的按钮:

代码语言:javascript
复制
const Stack = createStackNavigator();

const App = () => {    
  return (
    <Provider store={store}>
      <NavigationContainer>
        <Header />
        <Stack.Navigator>
          <Stack.Screen
            name="Home"
            component={HomeScreen}
            options={{
            headerShown: false
          }}
          />
          <Stack.Screen
            name="Login"
            component={LoginScreen}
            options={{
            headerShown: false
          }}
          />
        </Stack.Navigator>
        <Footer />
      </NavigationContainer>
    </Provider>
  );
};

如何将导航支柱传递给页脚组件?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2020-04-21 23:58:53

试试这个:

创建一个名为: RootNavigation.js的新文件

代码语言:javascript
复制
// RootNavigation.js

import * as React from 'react';

export const navigationRef = React.createRef();

export function navigate(name, params) {
  navigationRef.current?.navigate(name, params);
}
代码语言:javascript
复制
// file where you have the navigation

import {navigationRef} from './path/to/RootNavigation';

      <NavigationContainer ref={navigationRef}>
      .....
        <Footer />
      </NavigationContainer>

Footer.js应该是这样的:

代码语言:javascript
复制
// Footer.js

import React from 'react';
import {View, Button} from 'react-native';
import * as RootNavigation from './path/to/RootNavigation';

const Footer= () => {
  return (
    <View>
      <Button
        title={'Go to'}
        onPress={() =>
          RootNavigation.navigate('screenName ', {userName: 'Lucy'})
        }
      />
    </View>
  );
};

export default Footer;

要获得更多信息,您可以阅读文档。https://reactnavigation.org/docs/navigating-without-navigation-prop/

票数 54
EN

Stack Overflow用户

发布于 2020-04-20 13:31:39

Stack.Screen组件之外的组件不接收导航支柱。因此,在本例中,您必须在页脚组件中使用NavigationContainer,如下所示:

  1. const myRef = React.createRef()创建一个ref
  2. 将其传递给<NavigationContainer ref={myRef}>,并且
  3. 用那个引用来导航,myRef.current?.navigate(name, params)

这都是这里的解释。这里的文档将新文件中的ref创建分开,以允许您在没有依赖循环/问题的情况下导入ref。在docs状态下,您现在可以在任何js模块中调用RootNavigation.navigate('ChatScreen', { userName: 'Lucy' });,而不仅仅是在react组件中。

但是,在您的情况下,您不需要单独的文件中的ref。

代码语言:javascript
复制
const Stack = createStackNavigator();
const navigationRef = React.createRef();

const App = () => {    
  return (
    <Provider store={store}>
      <NavigationContainer ref={navigationRef}>
        <Header />
        <Stack.Navigator>
          <Stack.Screen
            name="Home"
            component={HomeScreen}
            options={{
            headerShown: false
          }}
          />
          <Stack.Screen
            name="Login"
            component={LoginScreen}
            options={{
            headerShown: false
          }}
          />
        </Stack.Navigator>
        <Footer navigationRef={navigationRef}/>
      </NavigationContainer>
    </Provider>
  );
};

<Footer/>中使用navigationRef.current?.navigate(name, params)

票数 19
EN

Stack Overflow用户

发布于 2020-04-12 10:47:51

从文件上看。https://reactnavigation.org/docs/connecting-navigation-prop/

代码语言:javascript
复制
import * as React from 'react';
import { Button } from 'react-native';
import { useNavigation } from '@react-navigation/native';

function GoToButton({ screenName }) {
  const navigation = useNavigation();

  return (
    <Button
      title={`Go to ${screenName}`}
      onPress={() => navigation.navigate(screenName)}
    />
  );
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61170112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档