關注react native這個技術很久了,去年就做了一個簡單的Demo,最近有時間,重新瞭解了一下react native的現狀,發現已經有很大的進步,現在完善了一下原有的專案,並重新開源共享一下。
背景
對react native這個技術關注很久了,去年也花了很長時間學習,但中途因為時間問題沒有進行更深入的學習。當時,react native還存在很多坑,使用起來不太方便。一年過去,現在重新開始關注react native,發現react native已經將原有的很多問題解決,相比當年版本,有太多的進步。現在將原有專案重構並重新發布到github。
專案簡介
基於部落格園的介面,開發的一個部落格的app工具,包括個人部落格、部落格首頁、部落格詳情,後續會逐漸完善評論、推薦、以及新聞等相關模組。
使用的主要技術和外掛:
外掛 | 說明 |
---|---|
react redux | react state管理方案 |
react-navigation | react native新的頁面導航方案 |
react-native-elements | 一個react native UI庫 |
lodash | JS函式庫 |
react-native-autoheight-webview | webview解決方案 |
react-native-vector-icons | react native icon元件 |
專案結構
程式碼全部在source目錄裡,其他程式碼有react native自動生成,當然,index.js相關入口檔案有調整,source中目錄簡單介紹一下:
目錄 | 說明 |
---|---|
action | redux中的action |
common | 通用的js常用函式 |
component | 自己的UI元件 |
config | 專案的配置資訊,需要改成自己專案的,調整這裡。 |
constant | 定義的一些常量 |
middleware | react middleware log,記錄state日誌 |
reducer | redux中的reducer |
service | 網路請求,呼叫介面相關 |
style | 樣式 |
view | 頁面page |
使用
最基本的react native使用方式:
git clone https://github.com/itmifen/mfreader.git
npm install
react-native link
react-native run-ios複製程式碼
正常執行需要將config目錄中的index.js檔案中的accessInfo進行配置。clientId和clientSecret可以聯絡部落格園團隊獲取。
//cnblogs授權資訊
export const accessInfo={
clientId:"*********",
clientSecret:"**************"
};複製程式碼
首頁展示自己的部落格只需要修改blogname就可以了。
//app配置資訊
export const appinfo={
blogname:"joylee",
logourl:"https://pic.cnblogs.com/face/42030/20171003230725.png",
cnblogsApi:"https://api.cnblogs.com",
pageSize:10
};複製程式碼
專案技術說明
頁面導航解決方案
之前版本的react native 的頁面導航沒有一個很好的解決方案,最大的問題就是頁面切換的卡頓,很多第三方的導航元件使用起來效能更差,還不如自己開發。現在官方推薦使用 react-navigation 元件進行開發,使用之後的確比之前效能好很多,同時還支援tab、側邊欄導航效果,是以後react native開發必須考慮的方案。
redux
redux現在是react state管理最通用的解決方案,使用非常廣泛,我也不曾想到redux的學習花了我最多的時間。redux是一個state管理的解決方案,是一個單獨的專案,react redux是基於react 的解決方案,而非同步的react redux會更加複雜一點。對於redux的學習和使用,經歷了好久才真正理解redux的整個資料流和事件流。
html展示的解決方案
展示webview一直是一個頭疼的問題,雖然通過 js.coach 可以找到很多webview的解決方案,大部分看起來很好的解決方案是將html轉成原生的jsx節點。實際使用和最終的理想還是有差距的,最後我還是選擇了webview渲染html的方案。我使用的是react-native-autoheight-webview 這個元件,原始的webview元件必須設定高度,react-native-autoheight-webview可以不用設定高度,自動根據內容定義高度。
效能問題
頁面切換效能
強烈建議使用react-navigation,直接使用navigation元件,總是存在卡頓的情況,android環境特別明顯,使用react-navigation整個人都好了。基本不用考慮其他黑科技。
console.log日誌對效能非常大的影響
如果一直覺得開發除錯的時候系統卡頓明顯,建議把console.log去掉試試,console.log對效能影響嚴重,debug模式下也會感覺比較慢,開發完成後,最好是在release環境下測試下。
列表效能問題
很多人反饋列表效能的問題,我一直用listview,暫時沒有感覺到效能的問題,所有還沒有換成新的元件FlatList,後期會考慮替換,相信官方的推薦和解決方案,都是比較靠譜的解決方案。
效能問題大家一定要仔細閱讀 reactnative.cn/docs/0.49/p… 官方的效能說明,每一個都非常重要。
後期計劃
因時間有限,所有在UI上不會做太多的調整,這也不是我擅長的,關於功能會進行逐步完善:
- 增加新聞模組
- 增加評論瀏覽和評論功能
- 增加部落格園首頁和精華
- 完善個人中心以及相關設定
曾經考慮過做成多個站點聚合資料的形式,但是考慮到工作量的問題,可能短時間內無法實現。
(完)
歡迎大家關注我的公眾號交流、學習、第一時間獲取最新的文章。
微訊號:itmifen