react-native - 导航器外的导航不起作用
问题描述
我正在熟悉新的 react-navigation 版本。我在使用 navigation.navigate 方法时遇到了问题。
当前行为
当我们单击菜单按钮时,它会抛出一个错误 - Device: (65:24) undefined is not an object (evalating 'navigation.navigate') Expected Behavior
单击菜单按钮时,它应该打开抽屉 如何重现
解决方案
虽然FooterComponent
在 NavigationContainer 内呈现,但它不是屏幕或任何导航器内,因此它不会有可用的导航上下文,也无法从useNavigation
.
但是,对于这个特定问题有一个解决方法,您可以为 NavigationContainer 创建一个 ref 并将该 ref 传递给 FooterComponent。这在React Navigation docs 的“Navigating without navigation prop”部分中有详细描述。应用于您的零食,它需要进行以下更改(加上相关的进口):
const Navigator = () => {
const navigationRef = useRef();
return (
{...}
<NavigationContainer ref={navigationRef}>
{...}
<FooterComponent navigationRef={navigationRef} />
const FooterComponent = ({ navigationRef }) => {
{...}
<TouchableOpacity onPress={() => navigationRef.current.dispatch(DrawerActions.openDrawer())
}>
然后,您可以将相同的方法用于其他选项卡navigationRef.current.navigate('Notifications')
或navigationRef.current.navigate('Home')
用于其他选项卡。
你可以在这里看到这适用于你的零食:https ://snack.expo.io/POeoVzAsG
推荐阅读
- sql-server - 从 Rails 查询转换 SQL Server 日期格式
- r - 绘制缺少日期范围 R 的时间序列
- bazel - 扩展 Bazel 缓存服务器的最佳方法?
- php - 如何修复 yum install php-mysqli 错误
- c++ - 在链表中添加字符串的简单方法
- polymer - 无法查询 dom 重复中的元素以设置单选按钮默认值
- automation - Automation Anywhere Citrix 插件
- c - 使用 regmap_read() 读取 I2C 寄存器但获取常量值
- php - PHPExcel使用标题名称将excel表上传到数据库
- java - 按下鼠标时检测输入事件javafx