Javascript pageshow';React组件上的s事件侦听器工作不正常

Javascript pageshow';React组件上的s事件侦听器工作不正常,javascript,reactjs,safari,dom-events,pageshow,Javascript,Reactjs,Safari,Dom Events,Pageshow,我有以下场景,第一次进入页面或从另一个页面返回页面时,我需要运行一些“代码” Safari的缓存功能()导致了这种情况,因为它正在缓存我的页面,而不执行任何操作 我遵循了他们的建议,在“pageshow”事件中添加了一个事件侦听器,这样我就可以检查该事件是否被持久化,然后运行我所需要的 这基本上就是我想要的: 第一页访问。。。附加侦听器=酷,我有 如果我导航出页面并返回(使用Safari),它将在pageshow=Cool上触发我的侦听器,我有。。。差不多 每次我导航回该页面时都应该触发侦听器

我有以下场景,第一次进入页面或从另一个页面返回页面时,我需要运行一些“代码”

Safari的缓存功能()导致了这种情况,因为它正在缓存我的页面,而不执行任何操作

我遵循了他们的建议,在“pageshow”事件中添加了一个事件侦听器,这样我就可以检查该事件是否被持久化,然后运行我所需要的

这基本上就是我想要的:

  • 第一页访问。。。附加侦听器=酷,我有
  • 如果我导航出页面并返回(使用Safari),它将在pageshow=Cool上触发我的侦听器,我有。。。差不多
  • 每次我导航回该页面时都应该触发侦听器=不酷,我的侦听器触发一次
我正在使用react和componentDidMount()来准备一切:

这是第一次奏效。。我能够导航出我的页面并返回到它+执行我需要的


问题是:第二次重复“导航出我的页面并返回”不会有任何效果。。看起来侦听器被删除了或是其他什么

经过两天的努力想办法。。。我的同事让我试试。我太想让“pageshow”监听器工作了,以至于完全忘了测试它;它完美地工作了:

window.addEventListener('popstate', function(event) {

难道组件迪德蒙特已经在为你做这件事了吗?如果是我,我会忘记eventListener,让react组件在其componentDidMount中处理它。如果每次您离开并返回时都要安装组件,这将起作用。componentDidMount console.log是否显示您每次离开和回来的时间?由于Safari缓存的原因,组件生命周期事件(如componentDidMount等)中的任何代码都不会执行。这就是我必须附加事件侦听器的原因。当前,如果event.persisted为true,我将强制重新加载页面。。这样做,一切都会执行(就像所有其他浏览器一样)。但是我想保持Safari不重新加载整个页面的行为,这就是我添加事件侦听器的原因。出于安全原因,我们必须解决这个问题,我们只需添加
window.onpageshow=function(event){if(event.persisted){window.location.reload();}在呈现React应用程序其余部分的顶级组件上,不确定这是否适用于您的情况,但您在哪里添加了代码?我试着把它放在componentDidMount中,但仍然没有启动。就像这个例子一样,但是我用了“popstate”来代替“pages how”,但是是的。。内部组件安装!已经有一段时间了。。在Safari()上,popstate总是被触发