React+Redux 仿 Web 追书神器
引言
由于 10 月份做的 React Native 项目没有使用到 Redux 等库,写了一段时间想深入学习 React,有个想法想做个 demo 练手下,那时候其实还没想好要做哪一个类型的,也看了些动漫的,小说阅读,聚合资源的开源项目。由于正好在学习开源的 Android 小说阅读器 -- 任阅 ,开始边学边做,已完成的功能列在下面。 项目地址 在这里,如果有好的意见欢迎提 issue 或 pr。
效果图
目标功能
- [x] 排行榜 -- 完成
- [x] 书籍详情 -- 完成
- [x] 阅读书籍 -- 完成
- [x] 书单推荐 -- 完成
- [x] 搜索书籍 -- 完成
- [x] 精选书籍 -- 完成
- [x] 分类书籍 -- 完成
- [x] 主题书单 -- 完成
- [x] 书单详情 -- 完成
- [x] 主 页 -- 完成
目录结构
- .
- ├─actions #redux的action,业务逻辑
- ├─components #页面容器
- │ └─common #公共目录
- │ ├─component-module #封装的组件
- │ ├─images #项目图片
- │ │ └─icon
- │ └─style #组件样式
- ├─modules #公用模块
- │ ├─api #管理api请求类
- │ └─constants #公共字段类
- ├─reducers #redux中的reducers,处理action发送的数据流
- ├─router #路由管理模块
- ├─store #redux中的store,联结reducers
- └─template #存放html模版
- .
项目的初始结构和说明已罗列如上。
下面对目录结构作以下说明
-
项目最初始是参考 react-pxq 初始化的。
-
中间件引人日志中间件 —— redux-logger,异步 API 调用 —— redux-thunk 等;
-
component-module 和 components 存放的都是 react 组件,区别是:容器组件就放在 components 中,和模块组件 (比如左侧菜单组件、书籍列表组件等) 就放到 component-module 中;
-
页面状态等公共部分最好是独立起来,统一管理;
-
跨域配置使用 pathRewrite 字段,需要注意 webpack-dev-server 的版本
准备工作
API 数据
- 数据来源主要是两个地方:一个是开源的 Android 项目与 RN 版本的数据,另一个是追书神器 h5 移动端
- 数据跨域:网上查了不少方法,考虑到便捷,使用反向代理的方式处理
学习 Redux
前面 8 章:主要是熟悉接下来会用到的基础概念,当然每一章讲完理论,后面都会有例子自己可以动手实践,加深对于前面概念的理解。
后面 9、10 两章开始运用上面学到的内容,做一个简单的项目。
参考所使用的库、编译打包的脚本以及 redux 代码。
这部分内容是后面在搭建项目整体结构的时候看的,对于 reducers、action、store 的内容比较深入,加深理解。
技术栈
- 虽然列了众多核心库,但是自己也谈不上熟练运用,所以列了一些遇到的问题和后期改进的东西。
Webpack(1.x)
-
本项目主要用了第三方的脚手架,学习了反向代理部分,当然自己也搭建过 webpack,后续会升级 webpack。
-
这里提下反向代理部分,关于使用 webpack-dev-server 进行配置反向代理的时候,如果使用 pathRewrite 到属性需要注意 webpack-dev-server 版本,这个属性是在 1.15.0 中,不然是不起作用的。特此说明,网上查到相同问题没有这个解释,以免浪费时间。
Redux
- 简单的讲他是一个管理单向数据流的框架,根据业务复杂度可以把控其中颗粒度。一开始学习的时候感觉反而把项目复杂化,看原理也是半懂不懂,后面不断实践理解前面看的内容,总归理论要与实践结合起来。
模型如下:简单的数据流向可以看作 View -> Action -> (Middleware) -> Reducer
React-router(2.x)
react-router(2.x) 与 react-router(4.x) 的还是不同的,当然主要是写法上,所以没更新到 4.0
另外, 发布打包时使用 nginx 等应用服务器托管的时候需要配置下,所用路由走 index.html 文件,不然路由会被拦截。
Antd(2.13)
-
antd 是(蚂蚁金服体验技术部)经过大量的项目实践和总结,沉淀出的一个中台设计语言 Ant Design,使用者包括蚂蚁金服、阿里巴巴、口碑、美团、滴滴等一系列知名公司,其中包括了移动端,Web 端,Pro(最近刚出)
-
遇到错误可以翻看 Antd 的 issues ,基本能解决。
-
提 Issues 的话要符合一定规范,一开始感觉麻烦,后来看了 提问的智慧 ,恍然大悟这部分的必要性。
扩展内容
功能扩展
- 讨论区数据统计分析,主要想知道一段时间的热点内容。
测试及优化
- 现在项目代码是没有进行单元测试,后续学习集成 JEST 测试
- 优化部分页面的组件以及一些 bugs
来源: https://juejin.im/post/5a33800551882506cf0eee89