Car*_*teu 11 react-native react-native-navigation
我有一个使用 React Native 的应用程序,我正在使用 react-navigation (5.2.9)。
我构建了一个 Stack.Navigator,我有我的屏幕,但我希望页脚组件在外面,以便它在所有屏幕中呈现。问题是,我无法从页脚导航,这是我需要做的,因为页脚有几个应该改变屏幕的按钮:
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>
);
};
Run Code Online (Sandbox Code Playgroud)
如何将导航道具传递给页脚组件?
Sou*_*Odf 27
尝试这个:
创建一个名为:RootNavigation.js 的新文件
// RootNavigation.js
import * as React from 'react';
export const navigationRef = React.createRef();
export function navigate(name, params) {
navigationRef.current?.navigate(name, params);
}
Run Code Online (Sandbox Code Playgroud)
// file where you have the navigation
import {navigationRef} from './path/to/RootNavigation';
<NavigationContainer ref={navigationRef}>
.....
<Footer />
</NavigationContainer>
Run Code Online (Sandbox Code Playgroud)
而 Footer.js 应该是这样的:
// 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;
Run Code Online (Sandbox Code Playgroud)
有关更多信息,您可以阅读文档。https://reactnavigation.org/docs/navigating-without-navigation-prop/
Ben*_*rth 10
组件外部的Stack.Screen组件不接收导航道具。因此,在这种情况下,您必须NavigationContainer在页脚组件中获取using refs,如下所示:
const myRef = React.createRef()<NavigationContainer ref={myRef}>,并且myRef.current?.navigate(name, params)。这一切都在这里解释。此处的文档将 ref 在新文件中的创建分开,以允许您在没有依赖循环/问题的情况下导入 ref。正如文档所述,您现在可以RootNavigation.navigate('ChatScreen', { userName: 'Lucy' });在任何 js 模块中调用,而不仅仅是在 react 组件中。
但是,在您的情况下,您不需要单独文件中的 ref。
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>
);
};
Run Code Online (Sandbox Code Playgroud)
并且在<Footer/>使用中navigationRef.current?.navigate(name, params)
小智 9
从文档中。 https://reactnavigation.org/docs/connecting-navigation-prop/
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)}
/>
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13113 次 |
| 最近记录: |