有没有办法在开发模式下运行create-react-app时禁用错误覆盖?
这是我正在谈论的重叠:
我问这个是因为我在我的应用程序中使用错误边界(React 16 Error Boundaries)来显示组件崩溃时的错误消息,但错误覆盖会弹出并覆盖我的消息.
小智 31
我们不提供在开发中禁用错误覆盖的选项.错误边界不取代它们(它们用于生产用途).
同时存在开发错误覆盖和错误边界是没有害处的; [escape]如果您想查看错误边界,只需按.
我们认为错误叠加比典型的错误边界(源代码,点击打开等)提供了巨大的价值.当我们探索启用热组件重新加载作为所有用户的默认行为时,这也是至关重要的.
如果您对禁用叠加层有强烈的兴趣,则需要弹出react-scripts并停止使用webpackHotDevClient.一种侵入性较小的方法可能是删除error覆盖层安装的事件监听器window.
小智 16
由于某种原因,只有在升级到 Webpack 5 时才会弹出叠加层。无论如何,您现在可以通过添加以下内容来取消叠加层webpack.config.js:
module.exports = {
//...
devServer: {
client: {
overlay: false,
},
},
};
Run Code Online (Sandbox Code Playgroud)
或者通过 CLI:npx webpack serve --no-client-overlay
摘自这里: https: //webpack.js.org/configuration/dev-server/#overlay
Hen*_*Zhu 11
可以使用react-error-overlay包中的stopReportingRuntimeErrorshelper 实用程序禁用错误覆盖。
首先,安装 react-error-overlay 包:
yarn add react-error-overlay
Run Code Online (Sandbox Code Playgroud)
然后在index.js安装根 React 组件之前,导入该实用程序并像这样调用它:
yarn add react-error-overlay
Run Code Online (Sandbox Code Playgroud)
现在应该禁用 create-react-app 中的错误覆盖。
另一种解决方案是添加以下CSS样式:
iframe
{
display: none;
}
Run Code Online (Sandbox Code Playgroud)
这样可以防止错误显示。
为了解决这个问题,你可以使用CSS:
body > iframe {
display: none;
}
Run Code Online (Sandbox Code Playgroud)
因此,这个覆盖层是一个 iframe,它添加到错误边界的后备组件上。无论如何,你可以通过完全隐藏它来做到他的目的,就像-
iframe#webpack-dev-server-client-overlay {
display: none;
}
Run Code Online (Sandbox Code Playgroud)
检查 iframe 正在使用的 id
小智 7
您可以通过首先捕获事件来抑制React的错误事件处理。例如,通过在放置public/index.html的<head>:
<script>
window.addEventListener('error', function(e){
// prevent React's listener from firing
e.stopImmediatePropagation();
// prevent the browser's console error message
e.preventDefault();
});
</script>
Run Code Online (Sandbox Code Playgroud)
由于您可能仍然需要React的错误覆盖来覆盖错误边界之外的错误,因此请考虑以下选项:
<script>
window.addEventListener('error', function(e){
const {error} = e;
if (!error.captured) {
error.captured = true;
e.stopImmediatePropagation();
e.preventDefault();
// Revisit this error after the error boundary element processed it
setTimeout(()=>{
// can be set by the error boundary error handler
if (!error.shouldIgnore) {
// but if it wasn't caught by a boundary, release it back to the wild
throw error;
}
})
}
});
</script>
Run Code Online (Sandbox Code Playgroud)
假设您的错误边界是这样的:
static getDerivedStateFromError(error) {
error['shouldIgnore'] = true;
return { error };
}
Run Code Online (Sandbox Code Playgroud)
结果是遵循try ... catch推理行的行为。
小智 5
如果你使用的是最新版本的react-script >= 5.0.0,你只需要添加一个环境变量ESLINT_NO_DEV_ERRORS=true。
https://create-react-app.dev/docs/advanced-configuration
| 归档时间: |
|
| 查看次数: |
7758 次 |
| 最近记录: |