為什麼用hooks,hooks哪裏好

語言: CN / TW / HK

為什麼用hooks,hooks哪裏好?

面試可能要你説出來,hooks是在哪個版本添加的。

文檔裏也寫了,但我用,可我不背。我就沒背下來到底在哪個版本加的。我説好像是16吧。這樣顯得不專業。

面試官問hooks是啥?我回答,hooks提供了一些接口,讓你不用寫class的寫法,來實現class裏狀態管理等一些功能。有時候我説法也變一變,總之不會照着背,每次面試我可能都説不一樣的。

根據官方文檔,裏面就是説,hooks他們讓你用狀態以一些react的功能,而不用原來的class寫法,就能做,用hooks來做。

而面試官想聽到啥?他問什麼是hooks,如果你回答官網定義,那麼好,你的水平一般,如果你官網定義都背不出來,那麼你水平很差。如果你説hooks是設計模式、設計語言、是編程思想,是抽象思維,那麼,牛,你是大神。説的越玄乎越能體現你水平高。這是我面試總結下來的經驗,也不一定對,也可能略微偏激了。總之,官網上,這個接口從哪個版本開始上了這個接口,這是面試官很喜歡考察的。

官網裏還有使用hooks的一些規則。

儘管我就一直是照着這個規則來寫代碼,但是面試的時候問,我很可能答不上來。這裏有兩條,在頂級聲明,在函數組件裏用。也就是説,在函數組件裏的第一層級用,而不是套條件語句或者函數。我有時候説成了在函數裏面的上面一些用。雖然這也符合,因為我寫任何代碼,聲明變量,都是最好是符合,在函數開頭裏都聲明瞭,而不是寫幾行聲明一個變量,這樣不好找變量,不是嗎?然而面試官就會笑,因為面試官以為我把頂級理解錯了,理解的不是頂級代表不在函數裏面的嵌套的語句塊的層級,實際上我沒背過文檔,但我也是遵循了官網提供的寫法來寫,我即使沒背過文檔,也沒犯這個錯誤,也可能犯了,有時候看文檔看的不仔細,就用錯了。

實際上我不應該因為面試問接口文檔而難過,如果不問接口文檔那問啥呢?有時候不問接口文檔,問你做沒做過框架,問你框架原理,那也不會。問啥啥不會。

有時候我會説,為啥有hooks?我好像看過一篇文章,説的是class,可能對js開發者來説是困惑的,所以hooks讓在函數的寫法裏,使用狀態管理,可能對js開發者更友好。降低了心智成本。

正好我隨便找一篇文章,講的是react團隊自己説的,他們説的做hooks,就是能降低你寫代碼的心智成本,當然我不照着別人説的背,他英文的意思就是,可以讓你免於一直在函數、類、高階組件、渲染道具裏轉換,而是隻用函數就夠了。我説這降低了心智成本,這句話可能也是聽了看了react團隊某些文章,我照着説的。

我不全面抄大神的博客,就照着意思來説,這個大神説了,類會增加繼承層級、增加過度複雜,潛在錯誤。

至於説hooks帶來啥,我覺得有些面試官真的背錯了。面試官背的是hooks帶來了應用的狀態共享與管理,共享一些邏輯,邏輯抽象。

那麼我請問,假如沒有hooks這個接口,你是不是這輩子都不把邏輯進行抽象了?你是不是這輩子都不做狀態管理了。

是不是不用hooks就不能做邏輯的抽象與封裝了?

大神的博客,可能是講了介紹瞭如何利用hooks做狀態、做邏輯,但是這並不是hooks解決的問題與帶來的新的功能。

舉個例子,吃西餐,問吃西餐帶來了什麼?

我説,帶來了一種西方的吃飯方式。

面試官説錯了,吃西餐提供了吃飯這個功能。

我心裏想,沒有西餐吃難道你就餓死了嗎?你就不吃東西了?但我不能説。只能説你説得對,我服。

很多國內的大神博客,講的也是,如果利用這個接口來做某些事。

而做某些事,這個本質上並不是因為這個接口而存在的。

如果沒有hooks,舉個例子,難道你寫java,java裏沒有hooks,你就不邏輯抽象,不封裝了嗎?假如你寫c++,難道你就抽不了像,封不了裝了嗎?

我看了大神博客,講的是利用自定義hooks的寫法,將一些複用的邏輯放在裏面,通過useHooks這種寫法,來提供簡單的調用方式。寫代碼的過程中,如果説,有一百個頁面,每一百個頁面都必須執行某一些重複的方法,那麼,本身就是可以做成一個公共方法,傳參數,動態參數,動態結果,這樣算不算邏輯抽象與封裝?這個代碼層面的邏輯抽象與封裝,有時候也做,有時候就懶得做。有時候又是為了懶而做。因為寫一個總比複製粘貼一百遍要輕鬆,對吧。

那麼面試官為啥要説react hooks給react帶來了邏輯抽象與封裝呢?

我如果反駁,class或者普通的js就不能邏輯抽象,就不能封裝嗎?面試官可能要拍桌子罵我。我想,面試官可能也並不是特別會語言表達,可能面試官主要想表達的是,你寫沒寫過自定義hooks,但這樣問太直白了,所以面試官想繞一下,問你了不瞭解react hooks的邏輯抽象與封裝,如果你能説出來,那麼表示你真的用過hooks,理解hooks。

而如果你説,hooks沒啥,就是一個新接口,我覺得可能是寫JS的人,不太喜歡Java,不太喜歡寫class,所以react團隊,提供了hooks這種寫法來降低入門門檻和開發中的心智負擔。這就跟面試官想要的答案不一樣。

那麼下次面試官問這個問題,我該如何回答?

我有幾個答案,一個答案是面試官想要的答案。一個答案是我自己的答案。還有可能,我可能就説,一個接口而已,很多程序員對同一個接口都有不同的理解,我覺得都行,我一般用這個接口的時候,會看文檔,如果看不懂,可能會看網上的博客和一些使用例子。

我之前在前公司,還真的寫過hooks,也寫過自定義的hooks,因為我懶,有的東西到處複製粘貼,還不如包裝起來,提供更簡單的調用方式。

另外就是,有些接口,我用過但面試真的就説錯了,或者做錯了,説自己會用,機試就做不出來,這也是很尷尬。