繁体   English   中英

如何让反应电子忽略未定义的错误?

How to let react electron ignore undefined error?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

在此输入图像描述 在此输入图像描述

在Windows上反应电子,如果A为空,则调用A.test将使应用程序停止工作,然后用户必须关闭应用程序并重新启动它。 如何让react忽略错误,并继续工作。 代码有很多A.testif(A) A.test ,我无法到处写。 如果无法解决此问题,我可以在Web视图上打印错误吗? 所以我没有远程访问用户的计算机来查看控制台错误。

6 个回复

注意

我认为解决方案是使用反应错误边界 ,如控制台中所建议的那样。

您已经指出您正在使用错误边界,因此在使用此小提琴测试您的方案后我认为您的实现可能不正确。


给出了文档中ErrorBoundary的类似实现:

class ErrorBoundary extends React.Component {
  state = { hasError: '' };
  render() {
    return this.state.hasError ? (
      <span>Oops! Something went wrong:<br />{this.state.hasError}</span>
    ) : this.props.children;
  }
}
ErrorBoundary.getDerivedStateFromError = (error) => ({ hasError: error.toString() });

该组件将呈现回落时,其所有打破。

错误边界是React组件,它们在其子组件树中的任何位置捕获JavaScript错误,记录这些错误并显示回退UI

它看起来类似于:

<MyReactApp>
  <ErrorBoundary>
    <ChatContent />
  </ErrorBoundary>
</MyReactApp>

现在,在任何错误ChatContent将渔获ErrorBoundary让您有机会来呈现,如回退:

Oops! Something went wrong:
ReferenceError: test is not defined

这是很难提供一个回答你的问题,因为我没有看到你的项目代码,但如果你的反应的版本是16,你可以使用一个特殊组件的生命周期方法,它的名字是componentDidCatch

在此方法中,您将拥有以下值:

componentDidCatch(error, info) {
  // Do something with error and info
}

即使你可以在这个方法中使用setState并显示你想要的。 我认为这种方法可以帮助您满足您的第二个愿望,即Web视图中的打印error

代码有很多A.test,如果(A)A.test,我不能写每个地方

但为什么? 您可以使用某些编辑器进行多文件编辑。 所以,你可以替换A.test()safeTest(A)功能。

export const safeTest = (Obj) => {
 if (Obj) {
  Obj.test();
 } else {
  // Any action you want
 }
}

我倾向于使用默认道具 如果在未定义的情况下传递prop,则可以为要分配给prop的组件设置一个值。 例如,如果组件依赖于嵌套在对象中的数组,则默认情况下可以将该值设置为空数组。 当您的组件依赖于API调用的结果数组时,这尤其方便,但组件在请求完成之前呈现。

如果你想尽可能少地捕获 Electron中主要和渲染器进程中的所有未处理错误 ,并通过对话框向用户显示它们 ,那么简单的方法就是使用电子未处理的错误来完成:

安装它( npm i electron-unhandled )之后,在你的主文件和渲染器条目文件(可能是它们的根index.js )中,你只需要在开头添加:

const unhandled = require('electron-unhandled');

unhandled({ showDialog: true });

现在,正如所说的那样,使用全局错误捕获器是一个好习惯,但如果只使用它,那就非常糟糕。 您应该尝试更准确地覆盖错误处理,至少方法是:

  • .then() { ... }.catch(err => ...)为你的承诺,
  • (..., (err, res) => { if (err !== null) { ... } ... )为你的回调,
  • 对于非异步或基于await的代码部分try { ... } catch(err) { ... }

而且,作为附注,我自己创建了一个依赖性库 ,以便安全,轻松地创建全局错误字典,以便很好地组织您的错误,但如果这个不适合您的需求,还有其他选择。

我想最好的解决办法是围绕你的A.test trycatch 在这种情况下,你可以做的是catch错误是Anull并从你的身边执行一些错误页面你想要它或只是保持错误沉默,因为你不想执行任何操作并抑制错误并继续执行。

您还可以使用try-catchA.test包装在一个函数中,并使用该函数代替A.test 通过这种方式,您可以避免多个try-catch块,并且可以根据您的要求处理错误。

1 如何让Artyom.js用于电子反应

因此,我目前正在从事电子反应项目,并且正在尝试将语音控制集成到其中以控制组件。 现在的问题是, Artyom.js将继续重启,并显示以下消息: 我知道如果将continues设置为true,那么重新启动将是正常的,但是它会在一秒钟内重新启动,因此它不能接受任何命令。 我也尝试仅使 ...

4 如何让RestTemplate忽略代理

我们有一个内部应用程序,该应用程序同时调用内部服务和外部服务。 对于外部服务,我们正在设置https代理。 但是,内部服务不需要这样做。 我们正在使用JasWsPortProxyFactoryBean创建soap服务客户端以调用外部服务。 并resttemplate调用内部RESTF ...

5 如何让摘要忽略开头的“ $”?

我正在使用VS代码编写markdown,并且为了方便起见设置了一些代码片段,但是,在编写内联数学时,这些代码片段不起作用,因为VS代码认为我正在写以“ $”开头的内容,即 我希望它会像 ...

6 修补 FormGroup 时如何让 Angular Reactive Forms PatchValue() 忽略空值或未定义

对于我正在构建的应用程序,我从 API 检索数据并直接使用该响应设置我的表单值。 为此,我正在使用反应式表单模块。 我已经构建了表单,使其与我从 API 获取的对象相匹配。 问题是某些字段应该是一个对象 (FormGroup),但在为空时为 NULL。 这会导致错误“无法将 undefined 或 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM