React+Redux仿Web追書神器

引言

由于 10 月份做的 React Native 項目沒有使用到 Redux 等庫,寫了一段時間想深入學習 React,有個想法想做個 demo 練手下,那時候其實還沒想好要做哪一個類型的,也看了些動漫的,小說閱讀,聚合資源的開源項目。由于正好在學習開源的 Android 小說閱讀器 -- 任閱,開始邊學邊做,已完成的功能列在下面。項目地址 在這里,如果有好的意見歡迎提 issue或pr。

效果圖

160592c0a575964a?w=1893&h=871&f=gif&s=9585858

目標功能

  • [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 兩章開始運用上面學到的內容,做一個簡單的項目。

  • 接著是用了 5-6 天學習網上開源項目的腳手架 —— 一個 react + redux 的完整項目 和 個人總結,基本上是看

參考所使用的庫、編譯打包的腳本以及 redux 代碼。

  • 最后,大概花了 3 天看了阮一峰老師寫的 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.x3.10備注參考
webpack 2 cannot resolve empty extensionsextensions數組中不能出現空字符或者字符串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 SchemamodulesDirectoriesmodules屬性名稱變更npm run dist 命令運行結果錯誤提示
找不到OccurenceOrderPluginnew 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
    160592c0a21a5f2a?w=1501&h=1197&f=png&s=102313

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://www.cnblogs.com/lmf-techniques/p/7852525.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281785.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281785.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281785.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【算法】LeetCode算法題-Maximum Subarray

這是悅樂書的第154次更新,第156篇原創 01 看題和準備 今天介紹的是LeetCode算法題中Easy級別的第13題(順位題號是53)。給定一個整數數組nums,找出一個最大和,此和是由數組中索引連續的元素組成,至少包含一個…

windows配置solr5.5.2(不通過tomcat,使用內置jetty)

一、windows下配置solr5.5.2(不通過tomcat,使用內置jetty) 第一步:安裝Jdk1.7 Solr5.5好像只支持Jdk1.7及以上的版本,沒親測,solr6.0是只支持jdk1.8及以上的,下圖為啟動solr時的截圖: 如何在windows環境下配置jdk及驗證…

java起源英文_Abbreviation 英文詞組縮寫(來源:南陽理工大學ACM)java

As we know, we often use a short sequence of characters in place of some words with a very long name. For example, ACM is an abbreviation of “Association for Computing Machinery”. Now we are using an acronymic method to get the abbreviation. An acronym i…

【C# Personal Handbook】運行環境

一、CLR、CLI、CTS、CLS、BCL、FCL簡介CLI(公共語言基礎)CLI是微軟公司向ECMA提交的一份語言和數據格式規范,CLR是目前為止唯一一個公共語言基礎的實現版本。CLI包括了公共類型系統(CTS)、公共中間語言(CIL…

如何完善自己的知識結構

★領域 (本來想用“學科”這個詞,后來覺得“學科”的范疇還是偏小,就改用“領域”)  按照傳統的習慣,通常會把知識歸類到不同的領域(比如:文學、數學、計算機、烹調、等等)。 ◇領…

MATLAB編程與應用系列-關于MATLAB編程入門教程的總體編寫安排

本系列教程來源于出版設計《基于MATLAB編程基礎與典型應用書籍》,如涉及版權問題,請聯系:156204968qq.com。 出版社:人民郵電出版社, 頁數:525。 本系列教程目前基于MATLABR2006a,可能對于更高級…

python語言特性-------python2.7教程學習【廖雪峰版】(一)

開始學習廖雪峰的py2.7教程: 2017年6月5日12:54:28 筆記: 廖雪峰python2.7教程1.用任何編程語言來開發程序,都是為了讓計算機干活。 2.Python是一種相當高級的語言。代碼少還不好?代碼少的代價是運行速度慢。3.用Python可以做什么…

java調c++代碼_Java中調用C++代碼的實現 | 學步園

JNI為 Java Native Interface 即Java本地接口,使用此種方式可以對C/C代碼進行調用,其在本質上是對C/C生成的動態庫進行調用而不是直接對C/C代碼進行調用Java代碼如下:public class TestJNI{//JNI在本質上是調用C/C的動態庫來實現的&#xff…

jeesite1.X 集成多數據源

2019獨角獸企業重金招聘Python工程師標準>>> 網上看了幾個例子,都是相同數據源的動態切換,如果不是同一種數據庫類型,分頁查詢就出問題。經過研究解決問題。 jeesite.properties配置多數數據源地址,這里以mysql5.7和sqlserver2008…

k8s HPA(HorizontalPodAutoscaler)-自動水平伸縮

Horizontal Pod Autoscaling in Kubernetes寫在前面我們平時部署web服務,當服務壓力大撐不住的時候,我們會加機器(加錢);一般沒有上容器編排是手動加的,臨時加的機器,臨時部署的服務還要改Nginx的配置,最后…

jQuery 基金會和 Dojo 基金會合并:Open Web

統一基金會,服務開發人員,推動開放 Web 技術發展jQuery 基金會和 Dojo 基金會今天宣布計劃聯合,旨在建立最大,最多樣化和最全面的基金會,通過服務開發者,他們的項目,他們的社區來構建開放的 Web…

spark java 邏輯回歸_邏輯回歸分類技術分享,使用Java和Spark區分垃圾郵件

原標題:邏輯回歸分類技術分享,使用Java和Spark區分垃圾郵件由于最近的工作原因,小鳥很久沒給大家分享技術了。今天小鳥就給大家介紹一種比較火的機器學習算法,邏輯回歸分類算法。回歸是一種監督式學習的方式,與分類類似…

jQuery.extend()方法

定義和用法jQuery.extend()函數用于將一個或多個對象的內容合并到目標對象。 注意: 1. 如果只為$.extend()指定了一個參數,則意味著參數target被省略。此時,target就是jQuery對象本身。通過這種方式,我們可以為全局對象jQuery添加…

1066. 圖像過濾(15)

原題: https://www.patest.cn/contests/pat-b-practise/1066 思路: 開胃小菜 實現: #include <stdio.h>int main (void) {int m;int n;int a;int b;int c;char ch;int tmp;int i;int j;scanf("%d %d %d %d %d", &m, &n, &a, &b, &c);// 題…

Wget用法、參數解釋的比較好的一個文章

一個語句就可以下載cvpr2016的全部論文&#xff1a; wget -c -N --no-clobber --convert-links --random-wait -r -p -E -e robotsoff -U mozilla http://www.cv-foundation.org/openaccess/CVPR2016.py 其中&#xff0c;-c表示斷點續傳&#xff1b;-N表示已經下載的內容不再重…

.NET VS智能提示漢化 (.Net6)

先上現成的.net6漢化文件&#xff0c;可以手動下載后參照 [如何為 .NET 安裝本地化的 IntelliSense 文件 ](https://learn.microsoft.com/zh-cn/dotnet/core/install/localized-intellisense)進行安裝。或者使用后文的工具進行自動安裝。無對照英文在前中文在前漢化內容來自 官…

go 返回mysql數組_Go基礎之--操作Mysql(一)

關于標準庫database/sqldatabase/sql是golang的標準庫之一&#xff0c;它提供了一系列接口方法&#xff0c;用于訪問關系數據庫。它并不會提供數據庫特有的方法&#xff0c;那些特有的方法交給數據庫驅動去實現。database/sql庫提供了一些type。這些類型對掌握它的用法非常重要…

Vue CLI 3開發中屏蔽煩人的EsLint錯誤

問題 Vue開發中&#xff0c;特別是當你閱讀分析別人的其中早期版本的Vue代碼時往往會遭遇到滿屏幕的煩人的EsLint錯誤。有關EsLint這個工具的作用不再贅述。查閱網上參考文檔&#xff0c;大多是針對早起版本Vue CLI工具項目的&#xff0c;在我最新使用的Vue CLI 3生成的工程中根…

pyinstaller---將py文件打包成exe

pyinstaller可將Python腳本打包成可執行程序&#xff0c;使在沒有Python環境的機器上運行。 1.pyinstaller在windows下的安裝 直接在命令行用pip安裝 pyinstaller&#xff0c; 在windows下&#xff0c;pyinstaller需要PyWin32的支持。當用pip安裝pyinstaller時未找到PyWin32&am…

老人尋求到一名程序員,用2W行代碼給自己打造了一幅肖像畫

今天翻墻看了下國外的論壇&#xff0c;看到了一位版主給一位老人描繪肖像畫的文章&#xff0c;不得不說這位大佬是真的厲害&#xff0c;近20000行代碼&#xff0c;而且還畫的很像&#xff0c;像小編我這種手殘黨&#xff0c;用筆也不能畫出來&#xff0c;不得不服&#xff0c;今…