react-native - 导航到同一屏幕时不会触发 React Navigation v4 生命周期事件
问题描述
假设我有一个ProductScreen
组件,它呈现有关产品的信息以及其他类似产品的列表。单击类似产品时,导航是从ProductScreen
==>ProductScreen
使用不同的参数/键完成的。
我面临的问题是我想对 React Navigation 焦点事件做一些事情(例如,滚动到顶部)
navigation.addListener('didFocus', () => {
console.log('didFocus')
scrollToTop()
})
我在组件第一次呈现时看到了日志,但是从ProductScreen
==>进行导航时ProductScreen
,didFocus
事件似乎没有再次触发,因此组件没有滚动到顶部。事实上,似乎没有一个生命周期事件( willFocus
, didFocus
, willBlur
, )被触发。didBlur
从组件 X 导航到具有不同参数的组件 X 时,有什么方法可以使用反应导航生命周期事件?谢谢!
解决方案
您正在导航到同一屏幕,因此didFocus
不会触发是正常的,因为屏幕已经聚焦。
如果您想对参数更改做出反应,您可以使用componentDidUpdate
/useEffect
将以前的参数与新参数进行比较,然后做您需要做的事情。
如果要导航到新屏幕,可以使用push
代替navigate
推荐阅读
- mysql - MySql:如何使用多个枢轴连接这两个表
- r - 如何从R中的数据集中删除浮动值
- javascript - 使用数组长度创建重复对象
- sql - Sql - 使用连接从大表(100M+)中获取记录时查询慢,提示?
- html - 动画 - 如何选择动画完成时发生的事情
- java - 在子项目的 build.gradle 文件中访问项目的 gradle.properties 文件中声明的变量
- python - 如何清除在 tkinter 的选项菜单小部件中选择的值?
- .net-core - .NET 通用主机 - 是否可以停止和重新启动主机?
- generics - Dart:需要实现运算符 [] 的通用约束
- javascript - 按钮侦听器 JavaScript