React 使用webpack 打包时,会生成一个main.js的文件。当页面组件增多时,main.js 也跟着变大,从而减慢页面的加载速度。使用 compression-webpack-plugin 配合 nginx,将文件压缩,这种方法可行,但是加载首页的时候,效果还是不理想。于是,想到了把main.js 拆分多个。从而减少首屏js大小,加快加载速度。
未用懒加载
Index 组件:
class Index extends React.Component {
...
}
export default Index;
路由引用:
import { Route,Switch } from 'react-router-dom';
import indexcomfrom '../views/index/index';
class RouterConfig extends React.Component{
render(){
return(
<Switch>
...
<Route exact path="/" component={ indexcom } />
...
</Switch>
)
}
}
export default RouterConfig;
这种方式打包,会把代码全部打包在main.js中。
用懒加载
两种方式可实现:
- 使用 React 中 Suspense,lazy
- 使用 react-loadable
当使用路由懒加载,在组件中使用 import 引用 css 时,报错。
improt './index.css' /// main.4d17afb4df2a6b00a18c.js?4d17afb4df2a6b00a18c:1 Uncaught (in promise) TypeError: Cannot read property 'call' of undefined
未解决,于是便把样式全部放进 入口 index.js 中引用。
React 中 Suspense,lazy
- 创建main.js :
```
class Main extends React.Component {
}
export const MainCom = Main
```
- 创建maincom.js
export { MainCom as default } from "./main";
- 路由引用
import { Route,Switch } from 'react-router-dom';
const MainCom = lazy(() => import('../views/main/maincom') );
class RouterConfig extends React.Component{
render(){
return(
<Suspense fallback={ <div> 加载中 </div> }>
<Switch>
...
<Route exact path="/" component={ MainCom } />
...
</Switch>
</Suspense>
)
}
}
export default RouterConfig;
react-loadable
- login 组件:
class Loginextends React.Component {
...
}
export default Login;
- 路由加载
import { Route,Switch } from 'react-router-dom';
import Loadable from 'react-loadable';
const logincom = Loadable({
loader : () => import('../views/login/login'),
loading() {
return <div>正在加载</div>
},
})
class RouterConfig extends React.Component{
render(){
return(
<Suspense fallback={ <div> 加载中 </div> }>
<Switch>
...
<Route exact path="/" component={ logincom } />
...
</Switch>
</Suspense>
)
}
}
export default RouterConfig;
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!