我正在学习 ReactJS 并尝试在其上构建一些应用程序。
当我尝试修改我的状态和渲染时,我的页面冻结并且无法执行任何操作,直到我的组件变得巨大时渲染完成。
我发现我可以用它shouldComponentUpdate
来优化我的代码,但问题是:我可以让这个渲染过程非阻塞吗?所以我可以告诉用户该页面正在处理一些重载执行,请等待或显示执行进度?或者如果用户可以取消渲染,例如,对于实时编辑器,如果用户编辑编辑器的内容,“预览”部分将停止渲染旧内容并尝试渲染新内容而不阻塞编辑器 UI?
这是重载示例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>React Tutorial</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.1/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.1/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
</head>
<body>
<div id="content"></div>
<script type="text/babel">
var Box = React.createClass({
render: function() {
return (
<div>Box</div>
);
}
});
var CommentBox = React.createClass({
getInitialState: function() {
return {box_count: 5};
},
heavyLoadRender: function() {
this.setState({box_count: 40000});
},
render: function() {
var render_box = [];
for (var i=0; i<this.state.box_count; i++) {
render_box.push(<Box />);
}
return (
<div>
{render_box}
<button onClick={this.heavyLoadRender}>Start</button>
</div>
);
}
});
ReactDOM.render(
<CommentBox />,
document.getElementById('content')
);
</script>
</body>
</html>
当我按下 时Start
,页面将冻结并且在所有内容Box
都呈现之前没有响应。是否可以添加一个名为Cancel
哪个用户可以取消渲染并清除所有框的按钮?