javascript - 如何从另一个组件访问“DrawerCustom.Navigator”组件的导航道具
问题描述
我是本机反应的新手,我正在尝试构建一个应用程序,其中工具栏位于抽屉上方,并且工具栏有一个允许打开抽屉的按钮,如图所示:
正如您所看到的,我试图实现的是始终使工具栏可见,即使在抽屉打开时也是如此。我已经设法实现了,问题是由于工具栏位于“DrawerCustom.Navigator”组件之外,我无法访问工具栏组件内的道具导航,每次单击按钮时我都需要打开抽屉(带有 3 个黑条的按钮)。这是我放置工具栏和抽屉组件的方式:
<NavigationContainer>
<View style={{...styles.default,...styles.marginTopPhone}}>
<ToolbarLogged toggleDrawer={()=>{navigation.toggleDrawer()}}
idLang={(stringLang==strings_pt)?1:2} lang={stringLang}/>
<DrawerCustom.Navigator ref={DrawerRef} drawerContent={props => <DrawerContent langFile={stringLang} lang={(stringLang==strings_pt)? 1 : 0} {...{...props}}/>}>
<DrawerCustom.Screen name='Dashboard' component={makeLayout} initialParams={{ name: stringLang.dashboard}}/>
<DrawerCustom.Screen name='Condominium' component={makeLayout} initialParams={{ name: stringLang.condominium}}/>
<DrawerCustom.Screen name='Profile' component={makeLayout} initialParams={{ name: stringLang.profile}}/>
<DrawerCustom.Screen name='Signout' component={Signout} />
</DrawerCustom.Navigator>
</View>
</NavigationContainer>
每个屏幕都有的 makeLayout 组件是一个根据参数“名称”加载当前屏幕的函数,如果名称是配置文件,那么 makeLayout 函数将加载配置文件屏幕。
解决方案
您应该使用 ToolbarLogged 组件中的“useNavigation”挂钩,它可以让您访问导航。只要组件在 NavigationContainer 内,这将起作用。
下面是一个按钮的示例,您也可以对您的组件执行相同的操作
import { useNavigation } from '@react-navigation/native';
function MyBackButton() {
const navigation = useNavigation();
return (
<Button
title="Back"
onPress={() => {
navigation.toggleDrawer();
}}
/>
);
}
您可以查看参考以获取更多详细信息
推荐阅读
- php - PHP preg_match_all 在比赛之间获取信息
- html - 将 flexbox 项目推送到桌面视图的右侧
- javascript - 警告:包装外部组件时的未知道具”
- dialogflow-es - Dialogflow V2 - 自定义上下文
- python - 这种排序有名称吗?什么样的数据对排序有效?
- html - 使用填充与高度(使用vh)与最小高度定义网页中部分高度的最佳实践是什么
- java - 与 AWS Dynamodb 集成的微服务应用程序中的 BeanCreationException
- javascript - 有什么方法可以读取我们包含在 img 标签的 src 中的脚本/图像的响应标头
- android - 调用另一个片段的视图寻呼机索引上的片段的 onActivityResult
- php - PDO 多个查询工作,除了 SELECT 查询