当前位置: 首页 > 知识库问答 >
问题:

在DOM渲染时显示加载屏幕?

百里锋
2023-03-14

这是来自Google Adsense应用程序页面的示例。显示在主页之前的加载屏幕显示在之后。

我不知道如何使用React做同样的事情,因为如果我让React组件渲染加载屏幕,它不会在页面加载时显示,因为它必须等待之前渲染的DOM。

更新:

我以我的方法为例,将屏幕加载程序放入index.html中,并在ReactcomponentDidMount()lifecycle方法中删除它。

示例和反应加载屏幕。

共有3个答案

彭硕
2023-03-14

解决方法是:

在渲染函数中,执行以下操作:

constructor() {
    this.state = { isLoading: true }
}

componentDidMount() {
    this.setState({isLoading: false})
}

render() {
    return(
        this.state.isLoading ? *showLoadingScreen* : *yourPage()*
    )
}

在构造函数中将isLoading初始化为true,在componentDidMount中将isLoading初始化为false

庞瀚
2023-03-14

这可以通过在html文件中放置加载图标(index.htmlex)来实现,以便用户在html文件加载后立即看到该图标。

当你的应用程序完成加载后,你只需在生命周期挂钩中删除加载图标,我通常在componentDidMount中这样做。

王建华
2023-03-14

当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 设置或返回在绘制文本时使用