Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。
请问下,如果没有 hooks 编写 class 使用 state 以及其他 react 特性会是怎样呢?能否举例说明一下?
我指的是,使用hooks编写代码会带来哪些好处?
Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。
请问下,如果没有 hooks 编写 class 使用 state 以及其他 react 特性会是怎样呢?能否举例说明一下?
我指的是,使用hooks编写代码会带来哪些好处?
14 回答14.6k 阅读
7 回答3k 阅读✓ 已解决
12 回答5.1k 阅读✓ 已解决
16 回答5.6k 阅读
9 回答3.3k 阅读
7 回答3.9k 阅读✓ 已解决
10 回答8k 阅读
你可以先复习一下初中语文,学会造长句、加逗号、起标题。
首先回答标题:如果没有 hooks,编写 class 的情况下使用 state 以及其他的 React 特性会是怎样的?
这句话的核心在于“使用 state”,但是加了两个限制条件“没有 hooks”和“编写 class”,这就是 hooks 出现之前,React 的一般玩法:
👆 class 组件实例化之后,每个实例相当于有自己的一片天地,自己在里面维持一个状态是天经地义的。
再回答问题描述里的问题:使用hooks编写代码会带来哪些好处?
事实上,单就 hooks 来看,它并没有带来任何好处,它只是弥补了函数式组件的一个固有缺陷而已,这个固有缺陷就是纯函数没有状态。
像上面例子中的
count
功能,用来记录按钮的点击次数,很简单对不对?但是如果使用纯函数是做不到的,使用纯函数就像有些公司频繁换领导一样,上一届领导做到一半的事情,接任的领导可能不会继续完成。你可能会想到用全局变量或者 IIFE:
确实也可以计数,但是每次执行
Counter
指向的都是同一个count
,导致Counter
不能复用。你可能会想到由父组件传递:
这样确实可以,唯一的问题就是:父组件的
state
又该怎么管理呢,不管理最终还是记不住?这样推导下去,最终一定会有一个根组件需要管理state
。除此之外,milkdown 组件的那种“先初始化为组件、再声明渲染逻辑”的点子也很妙,对 React 稍加改造,就可以实现类似的编码方式:
但这种写法似乎也存在可扩展性的问题。
回到这些方案试图解决的问题——“纯函数没有状态”,而 hooks解决了纯函数没有状态的问题。React 的其他特性,不能用纯函数解决的部分,归根结底也不过是状态的问题。