ReactDOM.reder导致Chrome调试React卡住



我正在尝试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"结束过程";当前选项卡处理,然后重新加载,这意味着即使调试卡住,也要强制重新加载

最新更新