自己是前端小白,學過html,css,js的各類書,各類視屏,就是沒有接觸web開發的內容。偶然看見一個朋友用react搭建了一個博客,因而本着程序員無所不能的精神,也嘗試着用react搭建博客。css
下面記錄我從小白到搭建博客的過程,沒有寫方法,由於網上已經不少方法了。html
這是我搭建的博客地址:饅頭加梨子前端
先說結論,我學到了什麼:react
單頁面web開發的流程。把要作的分爲一個個模塊,逐個實現,而後用webpack設置,開發並打包上線。webpack
antd庫的使用和一些組件的配置參數。ios
相關知識:SPA, react, react-router4, antd, fetch, promise, es6等。git
怎麼搜索?在github和相關社區搜索,一般能找到意想不到的驚喜。程序員
程序員怎麼學習?必定要手打教程,並思考爲何要這麼作。es6
我碰到了哪些難點:github
既然本身是小白,那麼固然要去參考其餘人的博客,尋找他們的優勢而且學下來呀。
那怎麼搜呢?我主要經過這些渠道搜索:
通過一番搜索,我最後定下來參考這幾個大神的博客,他們都是用react搭建的,而且都能在github上找到源碼。
而後樣式參考這幾個大神的博客,他們不是用react搭建的,可是樣式很好看。
做爲一個小白,確定要先學習react,那麼去react中文官網把文檔看一遍,而且把教程手打一遍啦。
我要一個什麼樣的博客?
個人博客要有如下特色:
我還進行了以下思考:
我不要首頁和側欄。由於顯得太複雜了。
我不要翻頁。由於我有回到頂端功能,並且我如今寫的文章還少,不須要翻頁。並且阮一峯的日誌也沒有作翻頁功能。
我以前沒有接觸SPA,可是在搜索的過程當中偶然碰到了,以爲頗有必要學習一下,由於這是當代web開發的分水嶺。因而去看了一本書《單頁Web應用:JavaScript從前端到後端》。
這是我學完SPA以後寫的一篇感想博客:當咱們說前端,咱們在說什麼。
SPA讓我瞭解到了模塊化開發的思想,也解決了個人一個需求:速度快。
路由是SPA,也是react中很重要的一個功能。
因而我去學習了react-router4,而且把react-router-tutorial本身手打了一遍。而且查資料補充了redirect等內容。
在學習water博客的時候接觸了一個頗有意思的ui庫:antd。我之前也沒有用過這種類型的庫,因而本着好奇的精神,也打算用這個庫。
我學習了這個庫裏面的這些組件:Button, Icon, Layout, Affix, Dropdown, Menu, Card, Collapse, List, Tag, BackTop。在學習的時候踩了不少坑,也懂了這些組件的一些配置參數。
antd也解決了個人一個需求:響應式。
雖然我在react中文官網的教程裏面學習了部分es6語法,可是在學習別人博客的時候碰到了不少es6語法,我本身也有強迫症,能用es6語法的地方儘可能用es6語法。好比我就很不喜歡用if-else,能用map+箭頭函數的地方我就用map+箭頭函數。
因而我學習並實踐了以下es6的知識:模板對象,箭頭函數,解構賦值,類,promise,let和const。
路由路由,仍是路由。
學過SPA以後,我以爲有必要把博客打形成SPA的形式。因而各類思考和查資料。最後打形成了目前這種形式:只在打開博客的時候發送http請求,其他操做不發送http請求,直接由瀏覽器完成。
其實還有另外一種實現方法,就是利用redux,真的是與個人想法不謀而合,因爲我尚未學,並且redux文檔不建議小型網站使用redux,因此我沒有用這種方法。
這個時候我總結了一篇博文:react在router中傳遞數據的2種方法。
怎麼獲取博客內容呢?
我一開始打算用老辦法:寫完markdown文件就上傳至github,而後一個個解析md文件。可是這個方案有個缺點,就是每次寫完都要build上傳很是麻煩。強迫症迫使我尋找更好的方法。偶然我發現用issue寫博客是真的好,因而最後改用從issue獲取博客內容。
那麼怎麼獲取呢?在別人博客中找了三種方案:
最後我決定用用isomorphic-fetch庫的fetch。
一開始我還不知到什麼是代碼高亮,只是看資料各類說代碼高亮。代碼寫着寫着才發現,文章頁面的代碼區很單調啊,因此這才醒悟原來是代碼區的代碼高亮。
我最後用的別人現成的方案:marked結合highlight.js設置代碼高亮。
因爲fetch方法返回的是promise對象,有必定的延遲,因此模塊的render函數開始渲染的時候並不能取到數據,而後marked庫各類報錯。
因而我去看了又看promise的文檔和組件生命週期的文檔。
最後經過在模塊的state屬性裏面添加一個loading屬性成功解決。
因爲antd沒有在文章界面自動生成目錄的組件,因而我本身動手寫了自動生成目錄的組件。
目錄要不要跳轉功能?個人目錄必需要不同凡響啊,強迫症須要我添加這個功能。
在用js寫跳轉功能的時候,我才發現react的錨是個巨坑,由於react的路由,es5的#錨點不能正確被解析,因而我又去查資料,最後用scrollIntoView解決了。原本覺得解決方法超麻煩的,最後一看真的超簡單。
對,路由路由,仍是路由。
搭建快完成了,搬上github能夠看了,可是我發現,我github上的其它githubPage都變成了個人博客了。
爲了解決這個問題,我只好把博客放在個人github的一個分目錄下面。又要改路由。
改好路由以後我又發現,刷新鍵不能用了。網上查資料,最後看大牛router4的原理解析裏面說,須要在服務端解決。可是我是github博客,沒有服務端。也不能不支持刷新鍵啊,並且不解決的話,收藏文章也不支持了,只能收藏首頁。
因爲強迫症,我只好又把博客放在github小號上面,來讓別人體驗完整的功能。
這個時候有2個問題。
一個是導航欄太單調了,須要加入一些其它的模塊,通過考慮,我加入了做品和關於模塊。這個沒有什麼難度。
另外一個是css樣式,我參考我本身在博客園的博客和其餘人的博客,一下就設置好了,沒什麼難度。