React (Jumpsuit) - 除非我 try/catch,否则错误不会显示在控制台中
React (Jumpsuit) - errors not showing in console unless I try/catch
我正在使用 Jumpsuit 构建一个网络应用程序,我注意到一个奇怪的错误。在 React 中通常会导致错误打印到控制台的事情不会这样做,除非我专门将该代码放在 try catch 块中。
例如,在一个组件的渲染方法中我有这样的:
render () {
return (
<div>
...
<div>{this.loadQuestionDropdowns()}</div>
}
</div>
);
}
并且在 loadQuestionDropdowns()
我有这个 return 来测试它:
{
...
return <Potato />
}
现在,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 进行状态更新时,我总是 catch/throw 错误。我的 NODE_ENV=开发和构建我只使用 Jumpsuit 的内置构建脚本 jumpsuit build
。我读到一个 post 说这是他们的 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"
}
}
关于为什么会发生这种行为的任何想法?
这似乎已经在内部问题跟踪器上提出:
https://github.com/jumpsuit/jumpsuit/issues/3
尽管在他们的回复中似乎没有直接解决这个问题。这在其他 redux/react 库中也很明显,即 redux-saga
。
例如:https://github.com/redux-saga/redux-saga/issues/632 - 虽然它不是完全相同的东西,但它是相关的。
我建议在 webpackbin(他们在项目中使用的演示站点)上收集一个最小的示例并提交一个问题(或者更好的是,一个 PR 来修复它)。
我正在使用 Jumpsuit 构建一个网络应用程序,我注意到一个奇怪的错误。在 React 中通常会导致错误打印到控制台的事情不会这样做,除非我专门将该代码放在 try catch 块中。
例如,在一个组件的渲染方法中我有这样的:
render () {
return (
<div>
...
<div>{this.loadQuestionDropdowns()}</div>
}
</div>
);
}
并且在 loadQuestionDropdowns()
我有这个 return 来测试它:
{
...
return <Potato />
}
现在,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 进行状态更新时,我总是 catch/throw 错误。我的 NODE_ENV=开发和构建我只使用 Jumpsuit 的内置构建脚本 jumpsuit build
。我读到一个 post 说这是他们的 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"
}
}
关于为什么会发生这种行为的任何想法?
这似乎已经在内部问题跟踪器上提出: https://github.com/jumpsuit/jumpsuit/issues/3
尽管在他们的回复中似乎没有直接解决这个问题。这在其他 redux/react 库中也很明显,即 redux-saga
。
例如:https://github.com/redux-saga/redux-saga/issues/632 - 虽然它不是完全相同的东西,但它是相关的。
我建议在 webpackbin(他们在项目中使用的演示站点)上收集一个最小的示例并提交一个问题(或者更好的是,一个 PR 来修复它)。