由于_blank
打开了一个新选项卡,因此它是您的应用程序的另一个实例,即使该应用程序是同一个应用程序,内部也有所不同。但是您可以使用类似localStorage
.
由于它们将被持久化并为同一来源共享,因此您可以在应用程序的新选项卡或任何选项卡或窗口中访问它。您需要在组件安装中或在第一次渲染之后查询它,并useEffect
使用第二个参数可能是空数组[]
. 如果你使用钩子,请查看 React 文档。
另一种方法是使用querystring
. 您可以从打开的组件实例接收查询字符串。
我相信您可以使用任何其他持久机制,例如Indexed DB、Cookies等。
在伞式网络消息传递下,我想到了其他一些方法;您可以使用的广播频道 API、Window.postMessage和频道消息 API。
如果您的状态相对较小,使用查询字符串可能会更好,或者 localStorage 是最简单的方法。如果您的数据更大,您可以使用索引数据库。它是异步的。只有在完成写入时要小心,然后才能在新窗口、选项卡中获取它。
在持久性用例中,在导航之前写入持久性,如果它是异步的,则在导航之前等待写入过程(通过在特定用例中打开新选项卡/窗口)。
人们可以通过右键单击并从上下文菜单中选择来导航到新选项卡。在这种情况下,页面可见性 API可以在 React 效果中的右键单击页面上使用(将其效果附加到 React 效果中,并为 React 效果提供一个空的第二个参数),并且数据可以再次写入持久性机制,上述之一提到的,其余的我的意思是打开选项卡中的操作将是相同的。
由于写入机制可能会延迟,即使它是同步的,如果不是以编程方式打开新选项卡,则可能会在写入完成之前发生。在这种情况下,打开选项卡的 React 效果读取写入的数据可能会提前读取。要绕过这些解决方法,例如setTimeout
可以简单地使用等待读取,但是,编程正确且有保证的定时方式将使用我上面提到的适当的 Web 消息传递 API 之一,例如Broadcast Channel、postMessage和Channel Messaging API。