React+Redux仿Web追书神器

引言

由于 10 月份做的 React Native 项目没有使用到 Redux 等库,写了一段时间想深入学习 React,有个想法想做个 demo 练手下,那时候其实还没想好要做哪一个类型的,也看了些动漫的,小说阅读,聚合资源的开源项目。由于正好在学习开源的 Android 小说阅读器 -- 任阅,开始边学边做,已完成的功能列在下面。项目地址 在这里,如果有好的意见欢迎提 issue或pr。

效果图

image

目标功能

  • [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 的版本

准备工作

    1. 整理 API
    1. 学习 Redux(搭建脚手架)

API 数据

  • 数据来源主要是两个地方:一个是开源的Android项目与RN版本的数据,另一个是追书神器h5移动端
  • 数据跨域:网上查了不少方法,考虑到便捷,使用反向代理的方式处理

学习 Redux

  • 刚开始我差不多用一个星期多学习了 Github 上的 从零开始学 ReactJS(ReactJS 101),基本上每一天看个 1-2 章,玩的也很开心,浅显易懂,适合初学者阅读。

前面 8 章:主要是熟悉接下来会用到的基础概念,当然每一章讲完理论,后面都会有例子自己可以动手实践,加深对于前面概念的理解。

后面 9、10 两章开始运用上面学到的内容,做一个简单的项目。

参考所使用的库、编译打包的脚本以及 redux 代码。

这部分内容是后面在搭建项目整体结构的时候看的,对于 reducers、action、store 的内容比较深入,加深理解。

技术栈

  • 虽然列了众多核心库,但是自己也谈不上熟练运用,所以列了一些遇到的问题和后期改进的东西。

Webpack(3.10.0)

  • 本项目主要用了第三方的脚手架,学习了反向代理部分,当然自己也搭建过 webpack,后续会升级 webpack。

  • 这里提下反向代理部分,关于使用 webpack-dev-server 进行配置反向代理的时候,如果使用 pathRewrite 到属性需要注意 webpack-dev-server 版本,这个属性是在 1.15.0 中,不然是不起作用的。特此说明,网上查到相同问题没有这个解释,以免浪费时间。

  • 升级Webpack到3.10版本并更新其他老的包,比如file-loader,css-loader等,出现的问题在下发表格中。

Webpack1.x升级到Webpack3.10
问题 1.x 3.10 备注 参考
webpack 2 cannot resolve empty extensions extensions数组中不能出现空字符或者字符串 resolve: {extensions: ['','.css']} resolve: {extensions: ['.css']} 参考1
Error: Chunk.entry was removed. Use hasRuntime() "extract-text-webpack-plugin": "^1.10.0", "extract-text-webpack-plugin": "^2.1.2", 版本问题 参考1
Error: Breaking change: extract now only takes a single argument. Either an options object *or* the loader(s). loader: ExtractTextPlugin.extract('style', ['css', 'autoprefixer']), ExtractTextPlugin.extract({ fallback: 'style-loader', use: 'css-loader' }) 新的版本只支持一个参数 npm run dev 命令运行结果错误提示
找不到API Schema modulesDirectories modules 属性名称变更 npm run dist 命令运行结果错误提示
找不到OccurenceOrderPlugin new webpack.optimize.OccurenceOrderPlugin(),newwebpack.HotModuleReplacementPlugin(),new webpack.NoErrorsPlugin(),new webpack.optimize.UglifyJsPlugin() new webpack.HotModuleReplacementPlugin(),new webpack.optimize.UglifyJsPlugin() 移除了OccurenceOrderPlugin 和 NoErrorsPlugin 参考1

Redux

  • 简单的讲他是一个管理单向数据流的框架,根据业务复杂度可以把控其中颗粒度。一开始学习的时候感觉反而把项目复杂化,看原理也是半懂不懂,后面不断实践理解前面看的内容,总归理论要与实践结合起来。
    模型如下:简单的数据流向可以看作 View -> Action -> (Middleware) -> Reducer
    [图片上传失败...(image-e3819-1514295005420)]

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容