【问题标题】:React (Jumpsuit) - errors not showing in console unless I try/catchReact (Jumpsuit) - 除非我尝试/捕获,否则错误不会显示在控制台中
【发布时间】:2017-03-04 13:14:09
【问题描述】:

我正在使用 Jumpsuit 构建一个 web 应用程序,我注意到一个奇怪的错误。在 React 中通常会导致错误打印到控制台的事情不会这样做,除非我专门将该代码放在 try catch 块中。

例如,在一个组件的渲染方法中,我有这样的:

render () {
    return (
        <div>
            ...
            <div>{this.loadQuestionDropdowns()}</div>
            }
        </div>
    );
}

loadQuestionDropdowns() 我有这个回报来测试它:

{
    ...
    return <Potato />
}

现在,Potato 不是一个实际的组件,也不是我导入的任何东西。通常,如果您尝试此操作,控制台将显示一个参考错误,指出“未定义土豆”。但是,它只会使应用程序崩溃,并且控制台中没有任何显示。如果我将它包装在 try catch 块中:

    try {return (<Potato />);}
    catch (e) {console.log(e);}

然后打印错误:

ReferenceError: Potato is not defined
    at Object.loadQuestionDropdowns (transformData.js:19)
    at Object.render (transformData.js:19)
    at p._renderValidatedComponentWithoutOwnerOrContext (InterceptorManager.js:52)
    at p._renderValidatedComponent (InterceptorManager.js:52)
    at p._updateRenderedComponent (InterceptorManager.js:52)
    at p._performComponentUpdate (InterceptorManager.js:52)
    at p.updateComponent (InterceptorManager.js:52)
    at p.receiveComponent (InterceptorManager.js:52)
    at Object.receiveComponent (createError.js:16)

应用程序继续运行。我在其他一些场景中也注意到了这种行为。我以前用 React、Redux 和 Jumpsuit 构建过东西,但没有遇到过这种情况。我查了一下,似乎 Promises 可以默默地吞下错误,但我没有在自己的代码中使用任何 Promises,当我通过 Jumpsuit 进行状态更新时,我总是捕获/抛出错误。我的 NODE_ENV=development 和构建我只使用 Jumpsuit 的内置构建脚本jumpsuit build。我读过一篇文章说他们的 webpack 配置有问题,但我不使用 webpack,我的 package.json 设置是:

{
  ...
  "scripts": {
    "build": "jumpsuit build && babel server --out-dir dist/server"
  },
  "dependencies": {
    ...
  },
  "babel": {
    "presets": [
      "es2015",
      "react",
      "stage-2"
    ],
    "plugins": [
      "transform-object-rest-spread"
    ]
  },
  "devDependencies": {
    "babel-cli": "^6.22.2",
    "babel-plugin-transform-object-rest-spread": "^6.22.0",
    "babel-preset-es2015": "^6.22.0",
    "babel-preset-react": "^6.22.0",
    "babel-preset-stage-2": "^6.22.0"
  }
}

关于为什么会发生这种行为的任何想法?

【问题讨论】:

    标签: reactjs debugging redux try-catch silent


    【解决方案1】:

    这似乎已经在内部问题跟踪器上提出: https://github.com/jumpsuit/jumpsuit/issues/3

    虽然他们的回复中似乎没有直接解决这个问题。这在其他 redux/react 库中也很明显,即 redux-saga。 例如:https://github.com/redux-saga/redux-saga/issues/632 - 虽然它不完全相同,但它是相关的。

    我建议在 webpackbin(他们在项目中使用的演示站点)上收集一个最小的示例并提交一个问题(或者更好的是,一个 PR 来修复它)。

    【讨论】:

    • 是的,看来我可能不得不直接去找创作者。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多