【发布时间】:2021-09-23 18:48:50
【问题描述】:
在我的开发环境中,我的 ReactJS 应用程序有一些令人费解的行为,该应用程序使用 fetch() 进行一些 API 调用并使用 create-react-app 引导
在处理 API 调用时,我抛出了一个错误,该错误被其他地方的中间件捕获,该中间件包含每个 API 调用。
我已将console.log() 放入此中间件的catch() 块中,并确认它可以捕获所有这些错误。另外,它可以正确地向最终用户显示错误消息,并且不会使应用程序崩溃。
但奇怪的是:
- 当我使用
throw明确抛出错误时,ReactJS 错误叠加层会弹出并显示给我。 - 当相同的代码在
json()调用上抛出错误(即 API 调用没有返回有效的 JSON)时,这再次被相同的中间件捕获并且错误消息显示相同方式在 UI 中,但没有显示 ReactJS 错误覆盖。
我什至尝试明确抛出 SyntaxError 以查看会发生什么,但在这种情况下,错误叠加层确实会出现。
我的问题基本上是:这有什么可担心的吗?毕竟,错误覆盖仅在开发环境中起作用,我不确定它是否真的表明这些错误会导致生产中的崩溃/问题。我不确定它何时出现或不出现的规则是什么。是否预期覆盖不会显示未捕获的Json.parse() 错误,但会显示其他所有错误?当错误覆盖出现时,如果我可以关闭它并且应用程序本身仍然正常工作,是否有什么可担心的?
【问题讨论】:
-
.json()发生在异步函数中,这就是它没有被中间件捕获的原因。它发生在 React 的渲染和提交阶段之外。阅读medium.com/trabe/… -
@GabrielePetrioli 谢谢。 ...但是它似乎被中间件捕获...如果我在
console.log中捕获到来自catch()中间件块的错误,我会看到 JSON 语法错误。这是来自 Fetch API btw 的catch()。你的意思是这就是为什么它没有被反应错误覆盖捕获?
标签: javascript reactjs create-react-app