【发布时间】:2020-01-03 03:37:08
【问题描述】:
我一直在尝试使用 react-cache 样式的组件,并在 render 方法中直接调用 Web 服务,向 React.Suspense 组件抛出一个 Promise,并在数据存在时重新渲染。他们调用 Web 服务,检查响应,然后根据响应呈现或抛出错误,直至错误边界。我注意到,每当在组件中引发错误时,它都会呈现两次。第一次调用堆栈看起来正常,第二次调用堆栈包含对invokeGuardedCallbackDev和invokeGuardedCallback的调用,这似乎与React有关,确保即使在开发构建中被错误边界“捕获”时,错误也会出现在控制台中.
我可以使用 react 和 react-dom 16.8.6 重现这一点,只需渲染一个像这样的组件:https://codesandbox.io/s/components-that-throw-render-twice-i26qc。
我想知道为什么会发生这种情况,因为它会导致组件从 Web 服务重新获取数据,重新抛出另一个 Promise,并导致控制台中出现“Uncaught Promise”错误。
【问题讨论】:
-
不错的收获!对于它的价值,这可能不是由于 react-error-overlay (如代码框描述中所述)。我能够使用普通的旧 CDN 链接重现此内容,但只能使用开发版而不是缩小版。这可能是 GitHub 上问题的一个很好的候选者。此外,在
App中添加错误边界对重新渲染没有帮助;它仍然发生。并且不会在 16.2.0 中发生,但会在 16.3.0 中发生!
标签: reactjs