吹 React Hooks,垃圾!

React Hooks 中不乏一些优秀的思想,例如通过第二个参数告知 hooks 函数依赖,当依赖发生变化的时候,才会执行对应的处理。这在之前使用 reselect 中早就体验过,不是什么高深的技术。但莫名其妙的,Hooks 被吹上了天,认为它是下一代数据管理方式,我只想送一个字:呸!

我唯一觉得 Hooks 有些价值的,是官方博客中提到一点:有利于打包时,让产出物文件体积更小。这是个事实,因为压缩程序可以用 a() 替换一个命名超长的函数,比方 IwillFuckYouReactHooksFunction(),而如果这个函数名是一个 class 的方法名,则无法被优化(理论上是可以被优化的,对于私有方法,如果确保知会在当前 class 中使用,那么优化成 _a() 也完全没有问题,因为外部不可能用到嘛)。而 React.Component 的生命周期函数莫名其妙整那么长,刚入门的同学背都要背半天,就是罪魁祸首。

除此之外,Hooks 一无是处。

在一些情况下,确实让写的代码量减少了。但是你确定在撰写代码阶段节省的时间,没有在调试阶段还回来?Hooks 是一个异类,遵循其思想创建的函数叫“状态函数”,就像 Date.now() 一样,鬼知道它会返回什么结果。你自认为能控制被隐藏起来的状态,因为社区告诉你“你不需要关心状态,而是关心什么时候需要产生影响”。我就想说,你确定你不需要关心状态?摸着黑心问一问自己吧。当你需要关心一下的时候,你的状态在哪里?在 React 内部的堆栈中,你根本摸都摸不到。

而 React 是什么?基于状态的 UI 渲染引擎。社区总结的一句话是“一个状态对应一个界面”,你现在控制不了状态,然后跟我说,你可以完全掌控界面的变化。拉倒吧。

我可以不负责任的说:状态是函数的天敌!

我从来不在一个暴露的函数中使用状态(例如在函数中引用函数外的变量),虽然偶尔会在函数内创建一个私有函数使用函数内部的一个状态来加快写码,但是我很清楚,这个状态和函数都是用两下就会销毁的。React Hooks 反其道而行,又开心的说,我们拥抱函数式组建,又诡异的宣称,你可以在函数式组件里面操作和使用状态(但是你拿不到状态)。如果你不是经常去看源码,你会严重怀疑自己是不是进入了童话世界当起反派,明明理想那么美好,为啥我总是干坏事……

吹吧!下一代主流!

吹吧!最理想的 React 编程方式!

吹吧!……

已有3条评论
  1. Louiszen 2022-06-28 19:55

    兄弟,material ui自從由v5開始用hook寫,bug嚴重了,performance又下降了。
    用hook寫的程式碼根本不是人看的,由他們繼續吹吧。

  2. 哈哈怪 2022-01-01 17:31

    兄弟讲的挺好,就看抛弃虚拟 dom 的框架什么时候能成为主流了

    而且按你的想法,solid.js 也是不可取的?

    要不还是写原生吧 webcomponent 也有一些公司在实验性的用了

    • 否子戈 2022-01-07 18:59

      这纯属我一家之言,不要过于纠结。
      现在弃用virtual dom已经是大势所趋了,包括vue3实际上也不是完全的virtual dom了。
      至于web component,怎么说了,它还是component,不是application,想要做应用,还需要更高层的设计,可以看下我写的框架 sfcjs https://github.com/tangshuang/sfcjs