在组件树的某些部分可能会发生水化并变得难以处理,而子组件仍处于挂起状态的情况下,是否存在有关如何处理这些情况的文档/指南?
示例:https://simple-remix-deferred-demo.fly.dev/
绿色:水合
红色:已暂停
单击页面水合部分中的任一“Link”元素,将触发重新呈现,并导致暂停边界在完成之前接收更新:https://reactjs.org/docs/error-decoder.html/?invariant=421这不是一个问题,在应用程序的功能方面,因为我是在假设父更新的交互式组件将是预期的,我的意思是,为什么他们不呢?
所以我想我有几个问题:
1.为什么react会记录此错误?这是一个 * 实际 * 错误吗?
1.是否有我想不出的暗示会导致你的平均裸骨悬念使用下降,这就是这个消息存在的原因?
1.如果您希望在边界仍处于挂起状态时进行更新,是否有文档化的方法来处理此问题以避免出现此消息?
7条答案
按热度按时间eanckbw91#
有没有一个沙箱复制这个?理想情况下没有一个框架。
3pvhb19x2#
我可以给你拿一个。很简单:
SSR和挂起。在挂起边界解决之前,水合父组件并设置状态。
rlcwz9us3#
给你:https://github.com/jacob-ebey/react-suspense-reproduction
步骤:
npm start
个j8yoct9x4#
@gaearon,友好的ping这个,如果需要的话很乐意提供更多的信息。这对我来说似乎是一个常见的情况,我很想弄清楚如何处理这个问题,这样用户就不会在终端上看到一个可怕的错误消息。
w46czmvw5#
对于
<Suspense>
,我们是否需要另一个等价的suppressHydrationWarning
?2cmtqfgy6#
为了繁荣,有两种方法可以抑制我所知道的警告:
1.使用开始过渡:tom-sherman/react-suspense-reproduction@24388fc的最大值
1.记住暂停边界,以便状态更新不会导致其重新渲染:tom-sherman/react-suspense-reproduction@ebcdeb6
bz4sfanl7#
从#24082开始
我们还可以更进一步,通过在根节点实现选择性水化,允许更高优先级的更新(尽管不是同步),就像我们对Suspense边界所做的那样:中断当前的渲染,尝试以比更新稍高的优先级进行水合,然后继续渲染更新。我还没有实现这个,但是我已经构建了代码,预计稍后会添加这个。
你的复制品会不会击中这个未实施的案例?