这是来自Google Adsense应用程序页面的示例。显示在主页之前的加载屏幕显示在之后。
我不知道如何使用React做同样的事情,因为如果我让React组件渲染加载屏幕,它不会在页面加载时显示,因为它必须等待之前渲染的DOM。
更新:
我以我的方法为例,将屏幕加载程序放入index.html
中,并在ReactcomponentDidMount()
lifecycle方法中删除它。
示例和反应加载屏幕。
解决方法是:
在渲染函数中,执行以下操作:
constructor() {
this.state = { isLoading: true }
}
componentDidMount() {
this.setState({isLoading: false})
}
render() {
return(
this.state.isLoading ? *showLoadingScreen* : *yourPage()*
)
}
在构造函数中将isLoading初始化为true,在componentDidMount中将isLoading初始化为false
这可以通过在html文件中放置加载图标(index.htmlex)来实现,以便用户在html文件加载后立即看到该图标。
当你的应用程序完成加载后,你只需在生命周期挂钩中删除加载图标,我通常在componentDidMount
中这样做。
当html页面被渲染时,立即显示一个旋转器(当React加载时),并在React准备好后隐藏它。
由于微调器是在纯超文本标记语言/CSS(React域之外)中呈现的,React不应该直接控制显示/隐藏过程,并且实现应该对React透明。
由于将react渲染到DOM容器中-
你不能添加一个DOM元素(例如div)在反应根,因为React将替换容器的内容,一旦
ReactDOM. render()
被调用。即使您渲染null
,内容仍然会被注释-替换。
解决方法是将微调器类添加到react容器中,并使用
:empty
伪类。只要容器中没有呈现任何内容(注释不计算),微调器就会可见。只要react呈现的不是注释,加载程序就会消失。
例1
在该示例中,您可以看到一个组件,它将呈现
null
,直到准备就绪。容器也是加载器-
class App extends React.Component {
state = {
loading: true
};
componentDidMount() {
// this simulates an async action, after which the component will render the content
demoAsyncCall().then(() => this.setState({ loading: false }));
}
render() {
const { loading } = this.state;
if(loading) { // if your component doesn't have to wait for an async action, remove this block
return null; // render null when app is not ready
}
return (
<div>I'm the app</div>
);
}
}
function demoAsyncCall() {
return new Promise((resolve) => setTimeout(() => resolve(), 2500));
}
ReactDOM.render(
<App />,
document.getElementById('app')
);
.loader:empty {
position: absolute;
top: calc(50% - 4em);
left: calc(50% - 4em);
width: 6em;
height: 6em;
border: 1.1em solid rgba(0, 0, 0, 0.2);
border-left: 1.1em solid #000000;
border-radius: 50%;
animation: load8 1.1s infinite linear;
}
@keyframes load8 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.1/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.1/react-dom.js"></script>
<div id="app" class="loader"></div> <!-- add class loader to container -->
本文向大家介绍css加载会阻塞DOM树渲染吗?相关面试题,主要包含被问及css加载会阻塞DOM树渲染吗?时的应答技巧和注意事项,需要的朋友参考一下 css资源的加载时开的一个异步进程的,dom的解析是在另外一个进程,所以不会阻塞,但是会阻塞render tree的形成进而影响页面的布局
因为屏幕渲染可在位图中获取浏览器窗口内容,所以它可以呈现在任何地方,例如3D场景中的纹理。 Electron中的屏幕渲染的使用方法与 Chromium Embedded Framework项目类似,都可以使用两种渲染模式,并且只有脏区域在 'paint' 事件中传递才能更有效率。可以停止或继续渲染,还可以设置帧速率。指定的帧速率是上限值,当网页上没有发生任何事情时,不会生成任何帧。最大帧速率为60
离线渲染允许您在位图中获取浏览器窗口的内容,因此可以在任何地方渲染,例如在3D场景中的纹理。 Electron中的离屏渲染使用与 Chromium Embedded Framework 项目类似的方法。 可以使用两种渲染模式,并且只有脏区通过 'paint' 事件才能更高效。 渲染可以停止、继续,并且可以设置帧速率。 指定的帧速率是上限值,当网页上没有发生任何事件时,不会生成任何帧。 最大帧速率是
概览 离屏渲染允许你以位图的方式来获取 BrowserWindow 中的内容,所以它可以在任何地方被渲染,例如在3D场景中的纹理。 Electron中的离屏渲染使用与 Chromium Embedded Framework 项目类似的方法。 注意: 有两种渲染模式可以使用(见下),只有未渲染区域传递到 绘图 事件才能提高效率。 您可以停止/继续渲染并设置帧速率。 最高帧速率为 240,因为更高的值
所以基本上我有一个导航栏,可以在路线之间切换。当页面加载时,默认情况下会转到/home,但实际上不会呈现所提供的应用程序组件。我必须单击将您带到/主页的按钮才能渲染此内容。 我使用Redux的反应路由器。 这是我的浏览器路由器: 有什么建议吗?
文本 API 简介 今天我们开始征战一个全新的内容——HTML5 Canvas的文本API!要知道,艺术家通常同时也是一个书法家,所以我们要学习写字,而且是写出漂亮的字。是不是很有意思? 好了,先预告一下Canvas 文本API有哪些。 属性 描述 font 设置或返回文本内容的当前字体属性 textAlign 设置或返回文本内容的当前对齐方式 textBaseline 设置或返回在绘制文本时使用