为什么用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,因为我懒,有的东西到处复制粘贴,还不如包装起来,提供更简单的调用方式。

另外就是,有些接口,我用过但面试真的就说错了,或者做错了,说自己会用,机试就做不出来,这也是很尴尬。