Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 当导航到同一屏幕时,不会触发React Navigation v4生命周期事件_React Native_React Navigation_React Navigation Stack - Fatal编程技术网

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()
})