【发布时间】:2018-01-09 02:32:24
【问题描述】:
我有一个应用程序,它在服务器端渲染,然后在客户端渲染以添加功能,但是,虽然第一次有意义的绘制时间大约是 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> 终于有了内容,所以页面被重新渲染。
我的问题是,在解决所有动态导入之前,如何才能使路由器或应用程序不会在客户端(上图)上呈现?
注意:我不能简单地这样做:
import(path).then(render)
因为当我添加更多组件时,我将无法分辨要导入哪些路径,因此AsyncRoute 组件
【问题讨论】:
标签: javascript html css preact server-side-rendering