React Hooks是什么,相比 Component的优势是什么

React Hooks是什么

Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

React Hooks 的意思是,组件尽量写成纯函数,如果需要外部功能和副作用,就用钩子把外部代码"钩"进来。 React Hooks 就是那些钩子。

使用useState 维护状态; 使用useEffect执行副作用操作

什么是纯函数[3]

纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。

简单来说,一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用,我们就把这个函数叫做纯函数。这么说肯定比较抽象,我们把它掰开来看:

  • 函数的返回结果只依赖于它的参数。
  • 函数执行过程里面没有副作用。

什么是副作用[4]

副作用是在计算结果的过程中,系统状态的一种变化,或者与外部世界进行的可观察的交互。

让我们来仔细研究一下“副作用”以便加深理解。那么,我们在纯函数定义中提到的万分邪恶的副作用到底是什么?“作用”我们可以理解为一切除结果计算之外发生的事情。

“副作用”的关键部分在于“副”。就像一潭死水中的“水”本身并不是幼虫的培养器,“死”才是生成虫群的原因。同理,副作用中的“副”是滋生 bug 的温床。

副作用可能包含,但不限于:

  • 更改文件系统
  • 往数据库插入记录
  • 发送一个 http 请求
  • 可变数据
  • 打印/log
  • 获取用户输入
  • DOM 查询
  • 访问系统状态

这个列表还可以继续写下去。概括来讲,只要是跟函数外部环境发生的交互就都是副作用——这一点可能会让你怀疑无副作用编程的可行性。函数式编程的哲学就是假定副作用是造成不正当行为的主要原因。

这并不是说,要禁止使用一切副作用,而是说,要让它们在可控的范围内发生。

副作用让一个函数变得不纯是有道理的:从定义上来说,纯函数必须要能够根据相同的输入返回相同的输出;如果函数需要跟外部事物打交道,那么就无法保证这一点了。

React Hooks的目的

react有一个严格的规则:所有 React 组件都必须像纯函数一样保护它们的 props 不被更改。
函数组件有重大限制,必须是纯函数,不能包含状态,也不支持生命周期方法,因此无法取代类。
React Hooks的设计目的,就是加强版功能组件,完全不使用“类”,可以写出一个全功能的组件。

React Hooks的优势

  1. Hook 使你在无需修改组件结构的情况下复用状态逻辑(自定义hook)
  2. Hook 将组件中相互关联的部分拆分成更小的函数(比如设置订阅或请求数据),而并非强制按照生命周期划分。
  3. 类组件难以理解,影响组件预编译,Hook 使你在非 class 的情况下可以使用更多的 React 特性

参考资料

[1]React Hooks 入门教程-阮一峰
[2]react官方文档
[3]JavaScript----什么是纯函数
[4]函数式编程指北

猜你喜欢

转载自blog.csdn.net/tianxintiandisheng/article/details/112662319