react项目中点击按钮使用window.open方法打开新页面,再次点击数据不更新问题

问题描述

在使用react做后台管理项目时,有一个需求是,一个可根据条件查询的列表,里面有一个打印功能,打印的是当前查询条件的数据,点击打印按钮的时候,使用window.open()方法打开新的页面,并设置了打开窗口的位置,要打印的数据在新窗口里面展示,真正的打印功能也在新窗口实现。


此时有一个问题,要打印的数据我是存在localstorage里面的,当第一次点击打印按钮打开新窗口之后,要打印的数据是正确的,但如果我没有关闭新打开的这个窗口,从上一个页面换了查询条件,再次点击打印的时候,打开的还是上一次没有关闭的页面,这个时候页面不会自动刷新,也不会获取到最新的localstorage里面的值,打印的数据也不是新的。

试了很多的方法,也都没有实现,当我在componentDidMount里面直接写window.location.href的时候,由于componentDidMount是在页面加载完之后执行的生命周期,加载完执行刷新页面会无限循环,所以这个方法不行。想试着加一个判断条件,例如判断存在localstorage里面的某个值是否相等,但是localstorage里面的值更改后,两个页面的都会更改,所以会一直相等。

最后换了个思路,找到了监听localStorage的值的变化的方法,在新的窗口,可以监听到上一个页面存储的localstorage的值,有没有改变,如果改变了,就执行刷新页面的操作。

window.addEventListener("storage", function(e) {
    console.log(e)
    window.location.reload()
});

同域的不同文件会监测到存储值的变化。同一个文件,存储值的变化,监测不到。
存储数据的操作可以放在点击打印按钮打开新页面那里,这样就可以在点击之后,新窗口的数据才发生改变

对于这个问题,应该还有其他的解决办法,感谢补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值