我有一个应用程序,它是服务器端渲染的,然后在客户端渲染以添加功能,但是,虽然第一次有意义的绘画的时间大约是 1000 毫秒,但一旦客户端脚本下载,页面就会变成白色,几秒钟后它再次呈现(客户端)。
经过一番调试,我意识到这是因为我正在这样做:
Preact.render(<App />, document.getElementById('root'));
应用程序在哪里:
import { Component } from 'preact';
import { Router } from 'preact-router';
import AsyncRoute from 'preact-async-route';
export default class App extends Component {
handleRoute = e => {
this.currentUrl = e.url;
};
render() {
return (
<div id="app">
<Router onChange={ this.handleRoute }>
<AsyncRoute path="/" getComponent={() => import('../routes/portfolio').then(module => module.default)} />
</Router>
</div>
);
}
}
现在的问题是,html 是从服务器发送的,然后呈现。但是一旦执行了客户端脚本,<div id="app"></div>
就会刷新,因为AsyncRoute
尚未加载,这意味着没有要渲染的内容,因此页面变白。AsyncRoute
加载后, <div id="app"></div>
finally 有内容,因此页面被重新渲染。
我的问题是,在解决所有动态导入之前,如何才能使路由器或应用程序不会在客户端(上图)上呈现?
注意:我不能简单地这样做:
import(path).then(render)
因为当我添加更多组件时,我将无法分辨要导入哪些路径,因此AsyncRoute
组件