接下來是C頁的內容,也是閱覽器的重點,畢竟大家不是看看標題就飽了對吧?
我是先做顯示文章的主樓,再加入顯示主樓留言區的功能,最後再將所有樓層的顯示做出來,以及換頁
這招是小哈教我的,失智列車網站也有應用,而在這個 Side Project 則是頻繁用到
設定 Hook 的 State ,必定是利用 setState 函式
嗯?那如果我們把這個函式當作某個子元件的 Props ,把它傳進去,然後在子元件內觸發呢?
也就是說,我可以做到在子元件內判斷要不要改變父元件的狀態
具體是在哪些地方用到? 比如說:頁面開關
ArticleBlock 有個 Props setOpen
、Set_ArticleData
就是用來放入父元件 App 設定狀態所使用的 setOpenArticleBool
與 setDisplay_article
函式
當某個 ArticleBlock 被點擊時,ArticleBlock 改變父元件的 OpenArticleBool
與,Display_article
假如 OpenArticleBool
為真,則在主頁顯示對應的文章內文(ArticleBody)
其他還有很多,包括闇黑模式也都有用到,但上方的舉例都有說到重點,這邊就不一一細講
還記得上面闇黑模式提到的無解問題嗎?
其最根本原因就是因為:巴哈瀑布流的樓層內文是直接把整段HTML原封不動抓下來顯示在對應區域
辦到這一點的便是「dangerouslySetInnerHTML」
用法很簡單,它就像一個HTML的屬性,你爬回來一整段HTML後,存成變數當作屬性的值即可
當然最終結果也不是說真的原汁原味,我抓下來之後還是有做一些基本的篩選潤飾
像是巴哈的連結,全部都有 data
前綴(例如 data-src
),這爬回來不就沒辦法正常顯示了嘛?
所以我要將爬回來的內文篩出所有我需要改的 Element ,將原本的屬性去掉再加上新的屬性和原本的值
資料篩選反而是這 Side Project 最累人的部分
巴哈文章中,所有內文區域的東西,都是 class 叫作 c-section
的玩意兒
我是靠 for迴圈 去抓每一個 c-section
內的東西來拿這個樓層的內容,沒有更好的方法
而這之中,關於 c-section
的排序,我觀察出幾個狀況:
c-section
顯示頁碼
c-section
c-section
c-section
c-section
看出讓人皺眉的點了嗎?這些會影響 for迴圈抓資料的因素,同時也會影響我怎麼顯示層數
這就又得讓 Cheerio 篩資料,決定要不要爬取、要不要為該 c-section
計數了
明明需要找出各個 Element 不同之處,而這些 HTML 根本是同工異曲,最痛苦莫過於此