从零开始学React-coderwhy React课程笔记(十六)

294 阅读2分钟
  1. Router传参-路由配置-懒加载-React Hooks使用

React Router 待补充,先学习更重要的 Hooks

为什么要使用 Hooks

函数式组件存在的缺陷

在不使用 Hooks 的前提下,函数式组件存在以下缺陷:

  1. 函数式组件不可以定义 state 来保存组件内部的状态,因为函数每次调用都会产生新的临时变量
  2. 函数式组件在重新 render 时,整个函数都会被重新执行
  3. 函数式组件没有生命周期的函数可使用

类组件存在的缺陷

  1. 复杂组件变得难以理解。随着业务增多,类组件变得越来越复杂

    • 比如 componentDidMount 中,可能就会包含大量的逻辑代码:包括网络请求、一些事件的监听。这种代码很难拆分
  2. 难以理解的 class

    • this 指向比较难搞清楚
  3. 组件复用状态很难

    • 之前学习的高阶组件就是组件复用的一种,但是比较难用

Hooks 的出现

它可以让我们在不编写 class 的情况下使用 state 以及其他的 React 特性;

Hooks 可以解决类组件复杂度的问题,又为函数式组件带来了状态管理,生命周期等特性。这样既保留了函数式组件的简洁性,又能将类组件的特性增强到函数组件。

Hooks 的使用

使用 Hooks 的两个规则:

  • 只能在函数最外层调用 Hook。不要在循环、条件判断或者子函数中调用。
  • 只能在 React 的函数组件中调用 Hook。不要在其他 JavaScript 函数中调用。

useState

useState 的基本使用:

const [count, setCount] = useState(0);

count 就是当前的 state 变量,setCount是设置状态的函数。useState 传递的参数是初始值,如果没有指定就是 undefined

通过上面案例可以更好地理解为什么会叫做 Hooks

Hook 就是 JavaScript 函数,这个函数可以帮助你 钩入(hook into) React State以及生命周期等特性;