為什麼用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,因為我懶,有的東西到處複製貼上,還不如包裝起來,提供更簡單的呼叫方式。

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