你想请求一个功能还是报告一个bug?
在@gaearon的请求下进行讨论。
问题
我非常好奇流式情况下的Suspense的公共API会是什么样子。我在React中所做的或几乎总是做的事情是处理数据流,通常来自web套接字。它会是什么样子?用户是否容易实现/使用它?即使在内部,考虑到第一个值可能永远不会出现,Promise/thenable是否是一个合适的类型来处理这种情况?
期望
能够利用suspense“暂停”直到来自任何来源的数据流的第一个值到达。为了讨论的目的,我们假设是一个web套接字。
约束条件
- 第一个值可能永远不会到达
- 源可能会在没有错误的情况下关闭,从未提供过值
- 必须有一个人性化的拆卸机制,例如开发者如何目前在
useEffect
返回的函数中或在componentWillUnmount
中拆卸。 - 由流式源返回的值可能不止一个
可选约束条件
- 由N个值组成的源可能是同步的(后面跟着异步值)
场景
一个简单的应用程序有两个路由,一个需要打开web套接字连接并收集流式数据,另一个应该是关闭套接字连接的路由。来自web套接字的值可能耗时很长,以至于开发人员希望立即转到路由组件并显示一些带有suspense的旋转器,直到第一个数据到达。如果用户导航到第一个路由,然后在第一个值到达之前离开,会发生什么?
我的担忧是,即使在内部,如果那个第一个值的来源被撕裂,那么就有可能在第一个值到达之前创建泄漏。要避免这种可能性,唯一的方法是确保拆卸机制与thenable或promise某种方式绑定在一起,以便thenable被拒绝(或解决)并带有已知值,从而“解决”。
1条答案
按热度按时间7gyucuyw1#
关于这个的更新?假设我有一个应用,其中大部分操作/状态来自websocket消息。如果我不希望将这些消息的结果放入某种全局状态中,我可以有一个子组件订阅websocket的onmessage事件,并使用useEffect进行React。但是如果这个子组件或其父组件被挂起,这将如何工作?