react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式

2019-03-1808:06:59WEB前端开发Comments2,520 views字数 2391阅读模式

一直使用的是vue,很少使用过react进行项目的开发,因此此构建主要参考的是vue的项目经验。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

项目主要会涉及到的知识点

  • webpack 配置及其优化
  • react-router 升级为4.0之后的使用 react-router-dom react-router-config
  • react-router 异步4种异步加载配置

项目github源码:https://github.com/wangweianger/react16-webpack3.8-onepage-base-project

react和vue的开发模式很像,同样的组件化,模块化,统一状态管理机制,路由 ... 等等,因此我觉得作为一位使用的开发者,我们仅仅需要了解各自的api,各自的大致实现原理就可以开始上手撸代码了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

技术栈的相互切换没有太大的成本,上手开发都比较简单,因为有太多的一致性。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

一 :webpack的优化配置前面一篇文章中我有详细的介绍

请参考:http://blog.seosiwei.com/detail/9

webpack在vue和react里面的配置几乎是一致的,唯一的不同就是loader的配置,这里就不做详细的介绍。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

二:react-router4

react-router4版本 相对于v2 , v3有非常大的区别,可以说是完全重构的感觉。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

react-router4 中 拆分为文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

  1. react-router  核心功能
  2. react-router-dom 针对于浏览器的路由
  3. react-reouter-native 针对于native端的路由

在此基础上我们可能还需要:react-router-redux , react-router-config等插件。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

在router4以前,我们是使用getComponent的的方式来实现按需加载的,router4中,getComponent方法已经被移除。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

看了一下网上的文章,基本都介绍的不是很全面,因此在此总结一下,并给出实际的源码供大家参考。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

在这里主要介绍 v4版本按需加载的配置。

(1)Code Splitting使用 react-loadable , babel-plugin-syntax-dynamic-import

参考地址:https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/guides/code-splitting.md文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

https://www.npmjs.com/package/react-loadable文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

具体到项目配置如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

1.安装依赖

//安装依赖
npm install react-loadable --save-dev
npm install babel-plugin-syntax-dynamic-import --save-dev

2.webpack 解析import()配置:

react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

3.router路由配置

react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

(2)bundle-loader 按需加载方式,官方文档案例

参考地址:https://www.npmjs.com/package/bundle-loader文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

https://reacttraining.com/react-router/web/guides/code-splitting文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

1.安装依赖

//安装依赖
npm install bundle-loader --save-dev

2.新增Bundle组件 ./src/components 下新增 Bundle.jsx 组件,内容如下:

react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

3.router路由配置

react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

(3) 改变2的方案  import按需加载

参考链接:http://www.jianshu.com/p/547aa7b92d8c文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

https://reactjs.org/blog/2017/05/18/whats-new-in-create-react-app.html#code-splitting-with-dynamic-import文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

1.安装依赖

npm install babel-plugin-syntax-dynamic-import --save-dev

2.webpack 解析import()配置:

react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

3.新建BundleImport 组件 ./src/components 下新增 BundleImport.jsx 组件,内容如下:

react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式

4.router 路由配置

react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

(4)Create an Async Componen 创建一个Async组件方式异步加载

参考链接:https://serverless-stack.com/chapters/code-splitting-in-create-react-app.html文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

https://reactjs.org/blog/2017/05/18/whats-new-in-create-react-app.html#code-splitting-with-dynamic-import文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

http://babeljs.io/docs/usage/polyfill/文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

1.由于需要支持 async,await的语法,因此我们安装一下babel-polyfill

npm install babel-polyfill --save-dev
npm install babel-plugin-syntax-dynamic-import --save-dev

2.webpack入口配置 babel-polyfill , babel-loader 配置 syntax-dynamic-import plugin

react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

3.新增AsyncComponent组件   ./src/components 下新增AsyncComponent.jsx 组件,内容如下:

react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

4.router路由配置

react16 webpack3 搭建前端spa基础框架 react-router的4种异步加载方式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

总结:react-router 按需加载的方式有很多种,大家各自选择合适于自己的即可。所有的按需加载源码皆在 ./src/app.jsx 文件中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/10102.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/gcs/10102.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定