实现一个只能打开一个tab的hook

实现一个只能打开一个tab的hook

浏览器怎么获取到当前网页打开了多个,主要有两种方式,
BroadcastChannel的方式:两个tab之间发送消息

如果打开了多个tab:

tab页A:有人吗

tab页B:有人

如果只有一个tab:

tab页A:有人吗

。。。一直没回应

LocalStorage的方式,看变量是否被修改了
页面挂载时改为true,表示已经有人了
退出时改为false,表示没人了

两种方式对比

BroadcastChannel
准确性高。异步

LocalStorage
会被修改,准确性不高。同步

使用BroadcastChannel实现的问题

异步,造成最开始的一段时间,无法判断是不是真的有没有其他tab页打开

在react中,表现为,两种状态下的组件都会被渲染。

结合使用LocalStorage

在判断的时候,用LocalStorage给定初始值,LocalStorage是同步的,不会渲染其他的状态。

对于LocalStorage被修改或者错误的情况,用BroadcastChannel进行修正,最终结果以BroadcastChannel为准。