我正在尝试WebStorm和VSCode来调试React,它们都有这个问题。
我使用以下简单的React代码,Chrome调试被卡住了。
如何复制:
- 查看我的视频(此票证中的附加文件(
- 在
ReactDOM.render
中设置断点 - 点击F4调试html与想法内置的Web服务器
- 单击WebStorm调试工具窗口->在浏览器中重新加载
- 调试停滞和WebStorm调试工具窗口->quot;重新启动";无法重新启动调试(Chrome调试选项卡也被卡住无法重新加载(
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
</head>
<body>
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<div id="root"></div>
<script>
class App extends React.Component {
}
const domContainer = document.querySelector('#root');
ReactDOM.render(React.createElement(App), domContainer);
</script>
</body>
</html>
我也在React GitHub页面上报告了这一点,这是一个非常严重的问题,因为我很难开发React。
更新:
随后添加";beforeunload";是麻烦,它需要添加";beforeunload";项目中的代码
更好的方法是制作webstorm或vs插件,使用"chrome devtools协议";,在刷新之前运行js";ReactDOM=null";
更新:
简而言之,解决方案是在之后添加
window.addEventListener("beforeunload", function(event) {
ReactDOM = null
});
这个错误仍然存在于最新的chrome中,这里是问题
我发现tmp解决方案
在刷新之前,在运行时运行js"ReactDOM=null";然后刷新不会卡住
这是我的代码:
window.addEventListener("beforeunload", function(event) {
ReactDOM = null
});
ReactDOM.render(app, domContainer);
卡住的原因是:
反应代码:
function unbatchedUpdates(fn, a) {
var prevExecutionContext = executionContext;
executionContext &= ~BatchedContext;
executionContext |= LegacyUnbatchedContext;
try {
return fn(a);
} finally {
executionContext = prevExecutionContext;
if (executionContext === NoContext) {
// Flush the immediate callbacks that were scheduled during this batch
flushSyncCallbackQueue();
}
}
}
flushSyncCallbackQueue导致此错误
旧的:我在这里回答
简而言之,使用chrome扩展api"结束过程";当前选项卡处理,然后重新加载,这意味着即使调试卡住,也要强制重新加载