酷狗音乐- Vue / React 全家桶的两种实现

栏目: 编程语言 · 发布时间: 5年前

内容简介:两个月前用手机预览戳

引言

两个月前用 Vue 全家桶实现过一次 酷狗音乐 ,最近又用 React 全家桶重构了下,最终成果和 Vue 的实现基本一致,放个图:

酷狗音乐- Vue / React 全家桶的两种实现

手机预览戳 Vue 版本 , React 版本

demo 选择

本来想用 React 全家桶重新选个项目,但是没有找到合适的,最终就重构了下,因为这个项目难度适中,非常适合练手。

  • 接近 10 个单页,内容不多不少,需要 router
  • 音乐播放作为全局组件,数据全局共享增删改,需要 redux , vuex
  • 好几个公共组件,可以封装复用

项目源码在 这里 ,欢迎大家 star、fork

项目对比

我从根目录开始分析,左边 vue 右边 react

根目录

酷狗音乐- Vue / React 全家桶的两种实现

src 目录

酷狗音乐- Vue / React 全家桶的两种实现

这里有几个区别:

  • React 版本并没有 router 文件 ,因为它支持 pathcomponent 属性,来定位要渲染的组件,就像这样:

    酷狗音乐- Vue / React 全家桶的两种实现

    Vue router 似乎并没有提供 pathcomponent API ,所以必须要到 Router 配置里去读取 pathcomponent 属性。

  • React 也没有 mixins , 因为用 HOC 取代了 mixins 以我放在 components/HOC/index.js 里的代码为例:

    酷狗音乐- Vue / React 全家桶的两种实现

    而且,你也可以在里面加上生命周期钩子等等,实际上, React 之前也是采用 mixins 实现的,不过后来改了。

  • 一个 .vue 组件对应 React 中三个文件? 在很多情况下,是这样子。Vue 的行为结构表现分离,很明显,而 React 的分离虽然不是很明显,但实际上也是有的。以 App.vue 为例

    • App.vue 里的 style 对应 React 里的 App.less ,毫无疑问
    • App.vue 里的 templateprops 对应 React 里的 App.jsReact 称为 Presentational Components ,一般只有一个 render 方法 return html , 譬如:

酷狗音乐- Vue / React 全家桶的两种实现

  • App.vue 里剩余的部分,包括 ajax , mapState , 状态的变更,以及生命周期钩子等等,都是对应 React 里的 AppContainer.jsReact 称为 Container Components . 如图:

酷狗音乐- Vue / React 全家桶的两种实现

实际上, AppContainer.js 负责行为逻辑,而 App.js 负责结构展示, App.less 负责样式表现,依旧是 行为/结构/表现 的分离 。只不过与 Vue 稍有不同而已。这一点上,React 多费些脑力和胶水代码。

Vuex 和 redux 目录

酷狗音乐- Vue / React 全家桶的两种实现

这里跟我的实现有关系, redux 可能是比 Vuex 麻烦些, 但不至于图示如此夸张。因为我重构的时候改了逻辑。

selectors

selectorsVue 中的 getters 有相似,但底层原理不同。举个例子,我们如果要从一个巨量的 array 里找到某个数据,比较耗性能怎么办?很明显可以对参数做个缓存,如果查询 id 和上一次一样,就返回上次的结果,不查询了。 selectors 做的就是这个事。

actions

ReactactionsVuex 中的 actions 类似,都是发送指令,但不操作数据。

酷狗音乐- Vue / React 全家桶的两种实现

reducers

actions 发送指令,最终会到 reducers 里合并数据,与 Vue 中的 mutations 类似。

酷狗音乐- Vue / React 全家桶的两种实现

如果你注意的话,就会发现, reducers 里合并数据 总是返回一个新对象。Vuex 中,我们是直接修改 state 的数据的。

这里其实牵涉到了 VueReact 中的一个大不同。

总结

总体的目录和架构是类似的,不过具体用起来差别还不小。

技术栈的广度

Vue 全家桶只要加上 VuexVue-router 就可以了,而 React 在读完 redux , react-redux , react-router 文档之后,会发现他们还拆分、引出了不少东西,譬如 reselect , redux-thunk 等等,并且 redux , reselect 还不是局限于 React 的。

API

实践过程中,发现 Vue 中的一些类似的 API 在 React 中被进行了重构,比如 ReactcreateRef 取代了 ref="string" ,用 HOC 取代了 mixins 等等,虽然有些不习惯,但是感觉还好。

求职

本人最近正在找工作,有兴趣的欢迎私信哦,坐标上海,半年经验,比较了解 Vue+es6,了解一点 React,具体简历 戳这里


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网页艺术设计

网页艺术设计

彭钢 / 高等教育出版社 / 2006-9 / 39.00元

《网页艺术设计》将软件技术与艺术理论进行整合,注重知识性与研究性、实践性与理论性、系统性与逻辑性,全面介绍网页艺术设计的基础知识与基本实践技能,既培养学习者的网页技术应用能力,又培养学习者的艺术审美、艺术创新和研究性学习能力,使学习者在有效的课时内学习和掌握网页艺术设计的理论与实践。 《网页艺术设计》的特点是具有完整的知识结构、合理的教学设计以及立体化的教学资源。教材共分为8章,包括网页艺术......一起来看看 《网页艺术设计》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具