javascript – 使用System.import或require.ensure进行代码拆分和服务器端渲染
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 使用System.import或require.ensure进行代码拆分和服务器端渲染,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2707字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 使用System.import或require.ensure进行代码拆分和服务器端渲染](/upload/InfoBanner/zyjiaocheng/727/268582cbab60448d8c836b8d3a8583a3.jpg)
我正在研究在React应用程序中使用的代码拆分.
我似乎无法找到一种方法来为服务器端渲染引入代码拆分(和导入),它可以干净地传递到客户端.
仅供参考:我知道有一种方法可以使用React Router,但我认为这是一个更普遍的问题,并不是每个人都想使用它.此外,我觉得代码拆分不一定是路由的同义词.
这是一个非常基本的类,它将加载和呈现拆分代码包SplitComponent的内容.
如果呈现服务器端的路由包含此组件,则componentWillMount将确保在调用render之前代码与require同步加载.它会检查它是否是服务器端,因此它不会执行此客户端.
然后,对于客户端,componentDidMount将异步加载SplitComponent和System.import.
结果是服务器端呈现正确的页面,客户端将显示它,但随后立即componentDidMount将导致客户端加载SplitComponent,在此期间它将显示(但短暂地取决于加载时间)没有.最后,SplitComponent将加载并呈现.但是当它被移除时有可能闪烁,然后再次添加.这有损于在服务器上进行渲染的优点.
有没有更好的方法来处理这个?
import React from 'react';
const canUseDOM = !!(
(typeof window !== 'undefined' &&
window.document && window.document.createElement)
);
class Lazy extends React.Component {
constructor() {
super();
this.state = {
module: null
};
}
componentWillMount() {
if (!canUseDOM) {
const m = require('./SplitComponent');
this.setState({
module: m.default
});
}
}
componentDidMount() {
if (!this.state.module) {
System.import('./SplitComponent').then(m => {
this.setState({
module: m.default
});
});
}
}
render() {
const { module } = this.state;
console.log('Rendering Lazy', module);
if (module) {
return React.createElement(module);
}
return null;
}
}
export default Lazy;
解决方法:
如果您正在寻找一种可以大大减少解决方案中涉及的样板量的方法,我建议您查看’react-async-component'(https://github.com/ctrlplusb/react-async-component)
来自github页面的描述:
Create Components that resolve asynchronously, with support for server side rendering and code splitting.
This library is an evolution of code-split-component. Unlike code-split-component this library does not require that you use either Webpack or Babel. Instead it provides you a pure Javascript/React API which has been adapted in a manner to make it generically useful for lazy-loaded Components, with support for modern code splitting APIs (e.g import(), System.import, require.ensure).
我遇到了同样的问题(客户端渲染的半秒闪烁),你的解决方案是我找到解决它的唯一一个,但从那时起我遇到了这个库,它就像一个魅力我.
它的工作原理是将组件的状态存储在服务器呈现的模板中的窗口对象上,它使用客户端,直到异步客户端呈现完成为止.
文档也很好,总是很好.
在少量样板文件将您的渲染方法包装在服务器和客户端之后,它就像以下一样简单:
import React from 'react';
import { createAsyncComponent } from 'react-async-component';
const AsyncComponent = createAsyncComponent({
resolve: () => System.import('./components/MyComponent')
});
<AsyncComponent myProp={1} />
试试看.我希望它对你来说和我一样好.
内容总结
以上是互联网集市为您收集整理的javascript – 使用System.import或require.ensure进行代码拆分和服务器端渲染全部内容,希望文章能够帮你解决javascript – 使用System.import或require.ensure进行代码拆分和服务器端渲染所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。