技术:React16,Redux,React-Router,WebPack
项目演示
项目github地址
会点ps,所以自己设计了页面和交互。现在的数据都是是自己mock的,开发后台的时候会对接真实数据,由于搜索、收藏歌单、新建歌单、删除歌单、收藏单曲、移除收藏单曲等功能需要后台配合,所以现在都是纯前端展示,不具备功能
部分页面:
项目描述
项目基于四个业务模块:播放器、曲库、发现、个人。这些模块中包含了一些基础组件来支撑业务逻辑:
- 歌曲列表组件 :(应用:曲库-曲库好歌、每日推荐、轮播图二级页面)点击歌曲播放并且高亮,收藏歌曲,将歌曲添加到播放列表;
- 可编辑歌曲列表组件 :(应用:我的-收藏的单曲、收藏的歌单,创建的歌单-歌单详情)歌曲列表组件的升级版,并在原有功能上添加了一键顺序播放、移除歌曲;
- 歌单列表组件 :(应用:我的-我创建的歌单、我收藏的歌单)点击进入歌单详情、删除歌单;
- 抛物线小球组件 :(应用:歌曲列表组件、可编辑歌曲列表组件)点击添加歌曲到播放列表图标时,跳出一个加号代表已经添加进播放列表;
- 收藏歌曲组件 :(应用:歌曲列表组件)点击收藏歌曲,弹出选框,用户可选择收藏到单曲列表还是收藏到歌单或者创建歌单(收藏的数据交互待完善);
业务模块
Redux设计
首先,这次设计的redux貌似不合理。。有几个没必要放到store里共享的状态也放进去了。大家当反面教材吧。。引入redux-thunk中间件,大部分axios请求都放到了redux中。
store内的状态分为8个模块:
- album :专辑模块信息(专辑列表、专辑详情、专辑内歌曲、专辑介绍);
- comment :评论模块(评论内容、是否已经请求回来,收到的回复(暂未开发));
- discovery :发现模块(排行榜列表,风格);
- personal :个人模块(用户信息、收藏歌单,收藏的歌曲数量,歌单数量);
- repertoire :曲库模块(轮播图、每日推荐数据,曲库好歌);
- player :播放器内核模块(当前播放的歌曲,待播放歌曲列表,是否应该渲染);
- publicSongs :公共的歌曲列表,可编辑歌曲列表和播放器内核共用,这样设计的原因是可编辑播放列表内的一键播放功能需要和播放器内核关联起来,如果点击一键播放,那么顺序播放歌单内歌曲,否则播放完成后播放待播放歌曲列表内歌曲;
- song-list-detail :歌单详情;
项目结构
总结
这项目是在我写的一个播放器上扩展来的,同时为了练习一下react全家桶开发的模式。通过几个react实战再加上这个练习,这种开发模式已经基本熟悉了,但是也还停留在写业务代码的阶段,这远远不够。还要学习从0开始构建一个完整的项目。redux这次用的比较多但是还需要深入学习(这个项目使用create-react-app一键创建的)。现在前端开发基本完成了,性能还未做优化。接下来慢慢的要开发后台,提供数据了,优化性能。