React native 当导航到同一屏幕时,不会触发React Navigation v4生命周期事件
比如说,我有一个React native 当导航到同一屏幕时,不会触发React Navigation v4生命周期事件,react-native,react-navigation,react-navigation-stack,React Native,React Navigation,React Navigation Stack,比如说,我有一个ProductScreen组件,用于呈现有关产品的信息以及其他类似产品的列表。单击类似产品时,将使用不同的参数/键从ProductScreen==>ProductScreen进行导航 我面临的问题是,我想在React Navigation focus事件上执行一些操作(例如,滚动到顶部) 我在组件第一次呈现时看到了日志,但是当从ProductScreen==>ProductScreen进行导航时,didFocus事件似乎不会再次触发,因此组件不会滚动到顶部。事实上,所有生命周期事
ProductScreen
组件,用于呈现有关产品的信息以及其他类似产品的列表。单击类似产品时,将使用不同的参数/键从ProductScreen
==>ProductScreen
进行导航
我面临的问题是,我想在React Navigation focus事件上执行一些操作(例如,滚动到顶部)
我在组件第一次呈现时看到了日志,但是当从ProductScreen
==>ProductScreen
进行导航时,didFocus
事件似乎不会再次触发,因此组件不会滚动到顶部。事实上,所有生命周期事件(willFocus
,didfours
,willBlur
,didflur
)似乎都没有触发
当使用不同的参数从组件X导航到组件X时,是否有任何方法可以使用react navigation lifecycle events?谢谢 您正在导航到同一屏幕,因此,
didpoccus
不触发是正常的,因为屏幕已经聚焦
如果要对参数更改作出反应,可以使用componentdiddupdate
/useffect
将以前的参数与新参数进行比较,并执行需要执行的操作
如果您想导航到一个新屏幕,您可以使用
push
而不是navigate来导航到同一屏幕,因此didpoccus
不会触发是正常的,因为屏幕已经聚焦
如果要对参数更改作出反应,可以使用componentdiddupdate
/useffect
将以前的参数与新参数进行比较,并执行需要执行的操作
如果要导航到新屏幕,可以使用push
而不是navigate
在导航操作中是否提供了不同的id
?这样,您将生成组件的新实例,而不是重用它。这类似于导航。导航({routeName:'Product',params:{Product:Product},key:Product.id})
,而Product.id
将有所不同。导航本身正在工作,但生命周期事件没有触发。我不确定RN navigation如何管理重复使用或创建新的,但对我有效的是向参数添加id:new Date().getTime()
-object在导航操作中是否提供了不同的id
?这样,您将生成组件的新实例,而不是重用它。这类似于导航。导航({routeName:'Product',params:{Product:Product},key:Product.id})
,而Product.id
将有所不同。导航本身正在工作,但生命周期事件没有触发。我不确定RN navigation如何管理重复使用或创建新的,但对我有效的是向参数对象添加id:new Date().getTime()
navigation.addListener('didFocus', () => {
console.log('didFocus')
scrollToTop()
})