React高级进阶教程-Hooks

310 阅读3分钟

掌握 React-Hooks 的正确姿势

Why -> What -> How

对于一个工程师来说,他对“Why”的执着程度,很大程度上能够反映其天花板的高度。

React-Hooks设计动机初探

它是 React 团队在真刀真枪的 React 组件开发实践中

逐渐认知到的一个改进点

背后涉及对类组件函数组件的两种组件形式的思考和侧重

image.png

不应怀揣“孰优孰劣”这样的成见

而应该更多地去关注两者的不同

进而把不同的特性与不同的场景做连接

重新理解类组件:包裹在面向对象思想下的“重装战舰”

类组件

是面向对象编程思想的一种表征

深入理解函数组件:呼应 React 设计思想的“轻巧快艇”

函数组件会捕获 render 内部的状态,这是两类组件最大的不同。

React 组件本身的定位就是函数

一个吃进数据、吐出 UI 的函数

把声明式的代码转换为命令式的 DOM 操作

把数据层面的描述映射到用户可见的 UI 变化中去

虽然 props 本身是不可变的

但 this 却是可变的,this 上的数据是可以被修改的

函数组件真正的把数据和渲染结合到了一起

函数组件是一个更加匹配其设计理念、也更有利于逻辑拆分和重用的组件表达形式。

Hooks 的本质:一套能够使用函数组件更强大、更灵活的“钩子”

函数组件比类组件“少”了很多东西

给函数组件的使用带来了非常多的局限性

如果说函数组件是一台轻巧的快艇

那么 React-Hooks 就是一个内容丰富的零部件箱

允许你自由地选择和使用你需要的那些能力

构建对 React-Hooks 的整体认知

useState():为函数组件引入状态

useEffect(): 允许函数组件执行副作用

useEffect 则在一定程度上弥补了生命周期的缺席

Hooks 是如何帮助我们升级工作模式的?

  1. 告别难以理解的 Class
    • 需要用实践层面去约束设计层面的东西
  2. 解决业务逻辑难以拆分的问题
    • 不合理的逻辑规划方式:逻辑曾经一度与生命周期耦合在一起
    • 可以按照逻辑上的关联拆分进不同的函数组件里
    • Hooks 能够帮助我们实现业务逻辑的聚合避免复杂的组件和冗余的代码
  3. 使用状态逻辑复用变得简单可行
    • Hooks 可以视作是 React 为解决状态逻辑复用这个问题所提供的一个原生途径,现在我们可以通过自定义 Hook,达到既不破坏组件结构、又能够实现逻辑复用的效果
  4. 函数组件从设计思想上来看更加契合 React 的理念

保持清醒:Hooks 并非万能

事事无绝对,凡事皆有两面性。

Hooks 的局限性

  • Hooks 暂时还不能完全地为函数组件补齐类组件的能力
  • “轻量”几乎是函数组件的基因,这可能会使它不能够很好地消化“复杂”
  • Hooks 在使用层面有着严格的规则约束